sancalg Posted June 26, 2010 Share Posted June 26, 2010 URGENTE Gastos de envio gratuitos sólo para España[/b]Buenos días, mi problema es el siguiente: desde mi tienda enviamos a distintos paises y los costes de envio están establecidos en función del peso, es decir que tengo una matriz con los rangos zonas y franjas de pesos. El problema es que quería ofrecer gastos de envío gratuitos al superar los 120€ de compra, pero sólo en España, sin embargo como las tasas están establecidas en función del peso no puedo seleccionar a la vez rangos de zonas y franjas de pesos.Podría seleccionar dentro de "Transporte" -> "Mantenimiento" que el envío gratuito comienza a los 120€, pero entonces me lo aplica a todas las zonas y no sólo a España.¿Alguien sería tan amable de echarme una mano?GRACIAS DE ANTEMANO Link to comment Share on other sites More sharing options...
JorgeGL Posted September 14, 2010 Share Posted September 14, 2010 Yo también estoy interesado en algo así para mi web. Agradecería que nos informaran si existe un módulo para esto, o si se pueden escribir unas líneas de código para poder tener la opción de que los gastos de envío gratuitos se apliquen sólo a los territorios o zonas que seleccionemos.Gracias. Link to comment Share on other sites More sharing options...
fidelius-online Posted November 23, 2010 Share Posted November 23, 2010 Hola.. yo llevo tiempo con el mismo problema.. Por lo mucho que llevo peleado, creo que no es posible configurar los gastos de envío gratis sólo aplicables a una zona y/o transportista.Lo más cerca que estoy de encontrar una solución, es crear 2 transportitas distintos: Me explico:En eso de "Gastos de envio gratis a partir de.." lo dejo a CERO.. ¡Nada de usar esa opcion!..Creo uno llamado "Envío con cargo (p.ej)" y le configuro el rango de precio de 0 a 150 € (o por peso, da igual).Otro transportista llamado "Envío gratuito" con rango de precio de 150 a 5000 (p.ej)Ambos transportitas asociados a la misma zona... y... ¡hasta ahí he llegado!... El caso, es que ahora me salen los dos transportitas para que el cliente eliga.. y claro.. no consigo que el transportista "gratis" no aparezca en pedidos inferiores, pero me imagino que algo hay que cacharrear por ahí... supongo que el transportista puede mostrarse o no en función al importe, no a la zona... Link to comment Share on other sites More sharing options...
yesiam Posted February 1, 2011 Share Posted February 1, 2011 Para que los portes de envío sean gratis para una zona (ejemplo españa ) debes modificar estas lineas classes/Cart.phpBuscar:if ($orderTotalwithDiscounts >= floatval($free_fees_price) AND floatval($free_fees_price) > 0) return $shipping_cost;Cambiar:if ($orderTotalwithDiscounts >= floatval($free_fees_price) AND floatval($free_fees_price) > 0 AND $id_zone == 1) return $shipping_cost;sólo debes colocar el ID de la zona que quieres gratis (hablamos de si la compra es mayor que = tu precio)Listo, ahora solo la zona que coloques si supera el precio que digas pues sera gratis, para las demas zonas, siempre tendran que pagar. Saludos 1 Link to comment Share on other sites More sharing options...
pitus Posted February 1, 2011 Share Posted February 1, 2011 Lo que propone Losian es una solución, pero no veo el problema de asignar a España->Zona-> un transportista único con su rango de pesos y precio.Los compradores de España sólo verán un trasportista!Para limitar el número de kg en los que vamos a regalar el transporte mirad este hilohttp://www.prestashop.com/forums/viewthread/90011/discusin_general/aportacin_modificacin_gastos_de_porte_pagados_hasta_xx_kg Link to comment Share on other sites More sharing options...
yesiam Posted February 1, 2011 Share Posted February 1, 2011 El problema que tendrías Pitus si lo haces como dices, es que si creas un monto especifico para que el envio sea gratuito pues simplemente te lo cojerian todos los transportistas y quizas para una zona te interese mas cantidad de euros y para otra menos, por eso es mejor hacerlo como digo, asi solamente si se cumple que la zona sea la asignada en el codigo pues es gratis y si no pues todas las demas a pagar, sea cual sea el monto para que se convierta en gratis. Hay otra forma de incluir mas zonas como digo, como tambien colocar el monto de euros a pagar para que sea gratuito el envio para cada zona, pero eso ya es otro tema. Saludos Link to comment Share on other sites More sharing options...
pitus Posted February 2, 2011 Share Posted February 2, 2011 Ya lo entendí Yesiam, no había captado bien el problemaSalu2 Link to comment Share on other sites More sharing options...
fidelius-online Posted May 14, 2011 Share Posted May 14, 2011 Vaya.. pues siguiendo las indicaciones de Yesiam a mi algo no me funciona He buscado en classes/Cart.php las lineas que se indican y mí código no es exactamente igual (supongo que algo variará en función a la versión de PS utilizada). Lo que yo tengo es: // Free fees if (isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $orderTotal >= floatval($configuration['PS_SHIPPING_FREE_PRICE']) AND floatval($configuration['PS_SHIPPING_FREE_PRICE']) > 0) return $shipping_cost; if (isset($configuration['PS_SHIPPING_FREE_WEIGHT']) AND $this->getTotalWeight() >= floatval($configuration['PS_SHIPPING_FREE_WEIGHT']) AND floatval($configuration['PS_SHIPPING_FREE_WEIGHT']) > 0) return $shipping_cost;Pues bien... añado el trozo de código correspondiente (teniendo en cuenta que 6 es el ID de la única zona en la cual quiero aplicar los gastos de envío gratis en función al importe) hasta dejarlo como:// Free fees if (isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $orderTotal >= floatval($configuration['PS_SHIPPING_FREE_PRICE']) AND floatval($configuration['PS_SHIPPING_FREE_PRICE']) AND $id_zone == 6 > 0) return $shipping_cost; if (isset($configuration['PS_SHIPPING_FREE_WEIGHT']) AND $this->getTotalWeight() >= floatval($configuration['PS_SHIPPING_FREE_WEIGHT']) AND floatval($configuration['PS_SHIPPING_FREE_WEIGHT']) AND $id_zone == 6 > 0) return $shipping_cost;(OJO.. Al hacer vista previa de este post, compruebo como el editor de textos del foro no me respeta correctamente el código escrito.. Tal vez esteis viendo que pone AND $id_zone 6 >, sin los signos igual en medio... Esto es lo que se come el foro.. en el código lo tengo bien escrito, con uno o dos iguales he probado. Es decir.. he añadido id_zone == 6Y nada!... Que todo sigue igual!... Al superar el importe configurado como envío gratis me los descuenta igual con independencia de la dirección del cliente.-He probado a poner $id_zone = 6 (con un sólo signo igual) por si acaso pero nada...-He probado a poner $id_zone = 6 (con un sólo igual y/o con dos) sólamente en el primer par de líneas pues deduzco que son las que entran en juego en mi caso ya que los costes gratis van en función del importe y no del peso, pero nada tampoco...¿Alguien que pueda arrojar un poco más de luz?... Gracias. ;-) Link to comment Share on other sites More sharing options...
yesiam Posted May 14, 2011 Share Posted May 14, 2011 Solución:if (isset($configuration[‘PS_SHIPPING_FREE_PRICE’]) AND $orderTotal >= floatval($configuration[‘PS_SHIPPING_FREE_PRICE’]) AND floatval($configuration[‘PS_SHIPPING_FREE_PRICE’]) > 0 AND $id_zone = = 1) return $shipping_cost; if (isset($configuration[‘PS_SHIPPING_FREE_WEIGHT’]) AND $this->getTotalWeight() >= floatval($configuration[‘PS_SHIPPING_FREE_WEIGHT’]) AND floatval($configuration[‘PS_SHIPPING_FREE_WEIGHT’]) > 0 AND $id_zone = = 1) return $shipping_cost;zone = a la zona que quieres que el envio sea gratis, eso es todo, un saludo ! Link to comment Share on other sites More sharing options...
fidelius-online Posted May 16, 2011 Share Posted May 16, 2011 Yesiam.. ¡Ahí le has dao!... Tres urras por el caballero!... Todo correcto con esa modificación. Muchas gracias. Link to comment Share on other sites More sharing options...
jesuson Posted May 16, 2011 Share Posted May 16, 2011 Uf estoy igual que uds quiero configurra portes gratis para la peninsula por compras superiores a X € ...¿el código que habeis puesto lo copio y lo pego tal cual?? Solución:if (isset($configuration[‘PS_SHIPPING_FREE_PRICE’]) AND $orderTotal >= floatval($configuration[‘PS_SHIPPING_FREE_PRICE’]) AND floatval($configuration[‘PS_SHIPPING_FREE_PRICE’]) > 0 AND $id_zone = = 1) return $shipping_cost; if (isset($configuration[‘PS_SHIPPING_FREE_WEIGHT’]) AND $this->getTotalWeight() >= floatval($configuration[‘PS_SHIPPING_FREE_WEIGHT’]) AND floatval($configuration[‘PS_SHIPPING_FREE_WEIGHT’]) > 0 AND $id_zone = = 1) return $shipping_cost;zone = a la zona que quieres que el envio sea gratis, eso es todo, un saludo ! Link to comment Share on other sites More sharing options...
Nacho Díaz Estudio Gráfico Posted May 17, 2011 Share Posted May 17, 2011 Solución:if (isset($configuration[‘PS_SHIPPING_FREE_PRICE’]) AND $orderTotal >= floatval($configuration[‘PS_SHIPPING_FREE_PRICE’]) AND floatval($configuration[‘PS_SHIPPING_FREE_PRICE’]) > 0 AND $id_zone = = 1) return $shipping_cost; if (isset($configuration[‘PS_SHIPPING_FREE_WEIGHT’]) AND $this->getTotalWeight() >= floatval($configuration[‘PS_SHIPPING_FREE_WEIGHT’]) AND floatval($configuration[‘PS_SHIPPING_FREE_WEIGHT’]) > 0 AND $id_zone = = 1) return $shipping_cost;zone = a la zona que quieres que el envio sea gratis, eso es todo, un saludo ! Brillante! Pero no tengo ni idea de php.Para 2 zonas, una gratuita y otra con precios de transporte diferentes habría que repetir ese código 2 veces?Podrías ilustrarlo un poco?Yo tengo esas zonas como Condados, pero coge el precio del EstadoGracias! Link to comment Share on other sites More sharing options...
Nacho Díaz Estudio Gráfico Posted May 17, 2011 Share Posted May 17, 2011 El problema que tendrías Pitus si lo haces como dices, es que si creas un monto especifico para que el envio sea gratuito pues simplemente te lo cojerian todos los transportistas y quizas para una zona te interese mas cantidad de euros y para otra menos, por eso es mejor hacerlo como digo, asi solamente si se cumple que la zona sea la asignada en el codigo pues es gratis y si no pues todas las demas a pagar, sea cual sea el monto para que se convierta en gratis. Hay otra forma de incluir mas zonas como digo, como tambien colocar el monto de euros a pagar para que sea gratuito el envio para cada zona, pero eso ya es otro tema. Saludos Yesiam, podrías desarrollar esto un poco a modo de tutorial para Dummies? Sería un gran avance para la humanidad! Link to comment Share on other sites More sharing options...
Sundbox Posted October 3, 2011 Share Posted October 3, 2011 Para los que piden varias zonas yo he hecho lo siguiente partiendo del codigo de Yesiam: He encerrado el $id_zone == 1 entre parentesis para poder hacer un OR, yo tengo 2 zonas gratuitas y las demas de pago, mi codigo queda asi: if ($orderTotalwithDiscounts >= (float)($free_fees_price) AND (float)($free_fees_price) > 0 AND (($id_zone == 10) OR ($id_zone == 9))) Osea mi añadido es: AND (($id_zone == 10) OR ($id_zone == 9)) Para 3 zonas seria: AND (($id_zone == 10) OR ($id_zone == 9) OR ($id_zone == 8)) y asi sucesivamente. Notese en el fragmento de codigo que al final son 3 parentesis el ultimo es el que cierra el if que ya estaba de antes. Link to comment Share on other sites More sharing options...
MrBram Posted February 16, 2012 Share Posted February 16, 2012 Hola, disculpad por reflotar un tema antiguo, pero estos códigos me funcionaban en la v1.2.3 pero ahora con al v.1.4.6.2 no son iguales, quizá se necesita una pequeña adaptación. Este es código que tengo: // Free fees $free_fees_price = 0; if (isset($configuration['PS_SHIPPING_FREE_PRICE'])) $free_fees_price = Tools::convertPrice((float)($configuration['PS_SHIPPING_FREE_PRICE']), Currency::getCurrencyInstance((int)($this->id_currency))); $orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING); if ($orderTotalwithDiscounts >= (float)($free_fees_price) AND (float)($free_fees_price) > 0) return $shipping_cost; if (isset($configuration['PS_SHIPPING_FREE_WEIGHT']) AND $this->getTotalWeight() >= (float)($configuration['PS_SHIPPING_FREE_WEIGHT']) AND (float)($configuration['PS_SHIPPING_FREE_WEIGHT']) > 0) return $shipping_cost; Link to comment Share on other sites More sharing options...
MrBram Posted February 16, 2012 Share Posted February 16, 2012 Bueno... he sido rápido, ya lo tengo, y comparto para beneficio de to2: // Free fees $free_fees_price = 0; if (isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $id_carrier == xx) $free_fees_price = Tools::convertPrice((float)($configuration['PS_SHIPPING_FREE_PRICE']), Currency::getCurrencyInstance((int)($this->id_currency))); $orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING); if ($orderTotalwithDiscounts >= (float)($free_fees_price) AND (float)($free_fees_price) > 0) return $shipping_cost; if (isset($configuration['PS_SHIPPING_FREE_WEIGHT']) AND $id_carrier == xx AND $this->getTotalWeight() >= (float)($configuration['PS_SHIPPING_FREE_WEIGHT']) AND (float)($configuration['PS_SHIPPING_FREE_WEIGHT']) > 0) return $shipping_cost; En el $id_carrier poned el número de transportista que quereis que sea gratis a partir de determinado importe, tal y cómo lo tengais configurado. Para los demás no aplicará esa regla de transporte gratuito. Link to comment Share on other sites More sharing options...
nadie Posted February 16, 2012 Share Posted February 16, 2012 Bueno... he sido rápido, ya lo tengo, y comparto para beneficio de to2: // Free fees $free_fees_price = 0; if (isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $id_carrier == xx) $free_fees_price = Tools::convertPrice((float)($configuration['PS_SHIPPING_FREE_PRICE']), Currency::getCurrencyInstance((int)($this->id_currency))); $orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING); if ($orderTotalwithDiscounts >= (float)($free_fees_price) AND (float)($free_fees_price) > 0) return $shipping_cost; if (isset($configuration['PS_SHIPPING_FREE_WEIGHT']) AND $id_carrier == xx AND $this->getTotalWeight() >= (float)($configuration['PS_SHIPPING_FREE_WEIGHT']) AND (float)($configuration['PS_SHIPPING_FREE_WEIGHT']) > 0) return $shipping_cost; En el $id_carrier poned el número de transportista que quereis que sea gratis a partir de determinado importe, tal y cómo lo tengais configurado. Para los demás no aplicará esa regla de transporte gratuito. Perfecto, esta solución valdrá para futuros usuarios que busquen lo mismo. Un saludo, Link to comment Share on other sites More sharing options...
MrBram Posted February 16, 2012 Share Posted February 16, 2012 Gracias! Ahora me surge otra duda... si es posible cambiar 0,00€ en los gastos de envío por la palabra GRATIS. Me sueno haberlo leido, pero solo encuentro como hacerlo en los productos, no en el envío. Link to comment Share on other sites More sharing options...
nadie Posted February 16, 2012 Share Posted February 16, 2012 Gracias! Ahora me surge otra duda... si es posible cambiar 0,00€ en los gastos de envío por la palabra GRATIS. Me sueno haberlo leido, pero solo encuentro como hacerlo en los productos, no en el envío. Quizas puedas hacer una condición donde lo quieras poner (por ejemplo en el tpl) {if $variable==x}Gratis !!!!!!{/if} Link to comment Share on other sites More sharing options...
MrBram Posted February 16, 2012 Share Posted February 16, 2012 Gracias, pero no hay manera!!!! El código del tpl: <td class="carrier_price"> {if $carrier.price} <span class="price"> {if $priceDisplay == 1}{convertPrice price=$carrier.price_tax_exc}{else}{convertPrice price=$carrier.price}{/if} </span> {if $use_taxes}{if $priceDisplay == 1} {l s='(tax excl.)' mod='onepagecheckout'}{else} {l s='(tax incl.)' mod='onepagecheckout'}{/if}{/if} {else} {l s='Free!' mod='onepagecheckout'} {/if} </td> </tr> {/foreach} Link to comment Share on other sites More sharing options...
nadie Posted February 16, 2012 Share Posted February 16, 2012 Gracias, pero no hay manera!!!! El código del tpl: <td class="carrier_price"> {if $carrier.price} <span class="price"> {if $priceDisplay == 1}{convertPrice price=$carrier.price_tax_exc}{else}{convertPrice price=$carrier.price}{/if} </span> {if $use_taxes}{if $priceDisplay == 1} {l s='(tax excl.)' mod='onepagecheckout'}{else} {l s='(tax incl.)' mod='onepagecheckout'}{/if}{/if} {else} {l s='Free!' mod='onepagecheckout'} {/if} </td> </tr> {/foreach} Hay puedes hacer la condición, sin problemas en esa parte del codigo. Link to comment Share on other sites More sharing options...
MrBram Posted February 16, 2012 Share Posted February 16, 2012 Me quedo = Llevo rato probando... pero noy un gurú en php Link to comment Share on other sites More sharing options...
nadie Posted February 16, 2012 Share Posted February 16, 2012 Me quedo = Llevo rato probando... pero noy un gurú en php La clave esta en hacer la condición, en esta parte del codigo: {if $priceDisplay == 1}{convertPrice price=$carrier.price_tax_exc}{else}{convertPrice price=$carrier.price}{/if} Link to comment Share on other sites More sharing options...
MrBram Posted February 16, 2012 Share Posted February 16, 2012 sigo probando, gracias, en cuanto lo tengo posteo la solución! Link to comment Share on other sites More sharing options...
jmrufo Posted March 26, 2012 Share Posted March 26, 2012 Buenas, No consigo hacer funcionar el código en un prestashop 1.4. ¿Alguien lo ha conseguido? // Free fees $free_fees_price = 0; if (isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $id_carrier == 60) $free_fees_price = Tools::convertPrice((float)($configuration['PS_SHIPPING_FREE_PRICE']), Currency::getCurrencyInstance((int)($this->id_currency))); $orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING); if ($orderTotalwithDiscounts >= (float)($free_fees_price) AND (float)($free_fees_price) > 0) return $shipping_cost; if (isset($configuration['PS_SHIPPING_FREE_WEIGHT']) AND $id_carrier == 60 AND $this->getTotalWeight() >= (float)($configuration['PS_SHIPPING_FREE_WEIGHT']) AND (float)($configuration['PS_SHIPPING_FREE_WEIGHT']) > 0) return $shipping_cost; Link to comment Share on other sites More sharing options...
Paulus80 Posted April 15, 2012 Share Posted April 15, 2012 Habéis conseguido hacer esto en 1.4. No habrá algún modulo para hacerlo mas sencillo? Link to comment Share on other sites More sharing options...
dan1t0 Posted May 26, 2012 Share Posted May 26, 2012 Me uno a la pregunta Link to comment Share on other sites More sharing options...
CarlosAdrian Posted June 11, 2012 Share Posted June 11, 2012 Yo también me uno a la pregunta: si hubiese un módulo que facilitase este asunto estaría muy bien. Mientras tanto, a ver si damos con una solución sin necesidad de tocar los .tpl. Si desactivamos el pedido mínimo poniendo 0 € en "el envío gratuito comienza a las:", ¿qué ocurriría si duplicamos las franjas de precios para la misma agencia? Y me explico: Imaginad que quisiéramos hacer que en Europa el envío gratuito fuese a los 100 € y en América a los 300 € (es un ejemplo). Si creamos franjas de precios duplicados, ¿funcionaría? Me refiero a crear cuatro franjas de precios: De 0 € a 100 € De 101 € a 9999999999 € De 0 € a 300 € De 301 € a 999999999€ Con esas cuatro franjas, pondríamos los costes para Europa y para América. Lo que no sé es si podría funcionar, ya que un pedido de 110 €, por ejemplo, entra en dos franjas. ¿Cogería el coste de envío máximo, el mínimo o daría error? He visto que hay una opción para poner qué debe hacer cuando NO encuentra una franja determinada, pero no sé cómo actúa el programa cuando encuentra dos franjas válidas. Link to comment Share on other sites More sharing options...
pepeprotos Posted August 6, 2012 Share Posted August 6, 2012 Buenas. A ver si con suerte Yesiam o cualquiera de los sabios de este foro me ayuda. Hice las modificaciones del post #4 y funcionó a la perfección, excepto por un pequeño detalle, pero para mí importante. Explico: Yo tengo gastos de envío gratuitos desde 99 euros para península. Cuando un cliente registrado actualiza el carrito, los gastos se recalculan bien automáticamente, es decir, que un cliente peninsular, al llegar a 100 euros los gastos de envío se ponen a cero, y un cliente de las islas, no. Todo perfecto. El problema son los invitados. Después de esta modficación, cuando un cliente no registrado llena un carro, al llegar a los 100 euros el carrito NO borra los gastos de envío como hacía antes. Si luego ese carrito se registra y el cliente es peninsular, el recálculo se hará bien y los gastos se borrarán, pero tengo miedo de que eso retraiga a clientes que no lleguen a registrarse pensando que tienen que pagar los gastos. ES como si Prestashop, al no saber a qué zona asignar al invitado lo asignara ante la duda a la tarifa más cara, y yo lo que quiero es que a un invitado le asigne la tarifa más ventajosa. ¿Alguien tiene alguna idea? Gracias por anticipado. Link to comment Share on other sites More sharing options...
sarbat Posted August 20, 2012 Share Posted August 20, 2012 Conseguido en el 1.4 ha sido modificando el cart.php creo que un módulo no sería suficiente ya que el core de Prestashop no está preparado así que he tenido que modificar el archivo y ya funciona, intenté usar el código que aparecia en el post y mis jefes recibieron un pedido del resto de europa les salio el transporte gratuito y han perdido 50 €, pero ya está solucionado. 1 Link to comment Share on other sites More sharing options...
Rubén Posted August 20, 2012 Share Posted August 20, 2012 quizás os moleste pero, ¿qué empresa de logística usáis? a mi me esta costando mucho encontrar una decente en la que pueda hacer los envíos gratis. Link to comment Share on other sites More sharing options...
dan1t0 Posted August 21, 2012 Share Posted August 21, 2012 Conseguido en el 1.4 ha sido modificando el cart.php creo que un módulo no sería suficiente ya que el core de Prestashop no está preparado así que he tenido que modificar el archivo y ya funciona, intenté usar el código que aparecia en el post y mis jefes recibieron un pedido del resto de europa les salio el transporte gratuito y han perdido 50 €, pero ya está solucionado. Hola, perdona que te moleste pero tengo dos dudillas: 1. ¿solo modificaste el cart.php? 2. y si es asi, podrias subir el codigo a pastebin o algun sitio parecido? muchas gracias! Link to comment Share on other sites More sharing options...
Noemi88 Posted November 18, 2012 Share Posted November 18, 2012 ¿Alguien resolvió esto para Prestashop 1.4??? por favor... Link to comment Share on other sites More sharing options...
Recommended Posts