¿Cómo calcular el envío gratuito basado en el precio total final en Prestashop?

Objetivos del blog.

Después de leer este blog, podremos calcular el envío gratuito según el precio total final del carrito.

Planteamiento del problema

Actualmente, cuando agregamos productos en

  • El monto total del carrito es de $ 100, que se ofrece con envío gratuito y también se agrega un descuento de 5%
  • Luego, después del descuento, el monto total del carrito establecido por debajo de $ 100, pero aún así se aplica el envío gratuito, lo que no debería ocurrir. El envío gratuito debe aplicarse en el importe total final del carrito después del descuento.
  • Esto es

Planteamiento del problema

Por qué el problema actual está ahí:

Corriente

$ shipping_cost + = $ carrier-> getDeliveryPriceByPrice ($ the_total_price, $ id_zone, (int) $ this-> id_currency);

Requisito

Necesitamos modificar el Root dir \ classes \ Cart.php

Procedimiento para resolver el problema.

Siga los pasos mencionados a continuación:

1. Función de reescrituragetPackageShippingCost

2. Después de la línea de abajo:

// El total del pedido en la moneda predeterminada sin cargos $ order_total = $ this-> getOrderTotal (true, Cart :: BOTH_WITHOUT_SHIPPING, $ product_list);

3. Agregue la siguiente declaración:

$ listeDiscounts = $ this-> getCartRules (); $ total_discounts = 0; if (is_array ($ listeDiscounts)) {if (isset ($ listeDiscounts [0] ['value_real'])) $ total_discounts = $ listeDiscounts [0] ['value_real']; } $ price_to_apply_shipment = floatval ($ order_total) - floatval ($ total_discounts);

4. Reemplace las líneas mencionadas abajo – Reemplace esta línea

$ check_delivery_price_by_price = Carrier :: checkDeliveryPriceByPrice ($ row ['id_carrier'], $ total_order, (int) $ id_zone, (int) $ this-> id_currency);

Con

$ check_delivery_price_by_price = Carrier :: checkDeliveryPriceByPrice ($ row ['id_carrier'], $ price_to_apply_shipment, (int) $ id_zone, (int) $ this-> id_currency);

———— Y —————– Reemplace esta línea

$ shipping_cost + = $ carrier-> getDeliveryPriceByPrice ($ the_total_price, $ id_zone, (int) $ this-> id_currency);

Con

$ shipping_cost + = $ carrier-> getDeliveryPriceByPrice ($ price_to_apply_shipment, $ id_zone, (int) $ this-> id_currency);

5. Borrar la caché y ejecutar. Consulte la siguiente captura de pantalla después de aplicar los cambios en el código:

front-end

Resumen

Después de seguir el procedimiento anterior, podrá calcular el envío en la cantidad total final del carrito.


Leave a Reply

Your email address will not be published. Required fields are marked *