From b2b73b929556054094ccb497d3b5d367a77f497f Mon Sep 17 00:00:00 2001 From: Romain Derie Date: Mon, 1 Apr 2019 14:06:18 +0000 Subject: [PATCH] [IMP] website_sale_coupon_delivery: consider free delivery odoo/odoo#31857 retrieve asynchronously the delivery carrier price instead of having to click on every one of them. If the delivery is free thanks to coupon, the delivery price should be free and no need to compute it. Closes #31857 task-1867265 --- .../controllers/main.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/addons/website_sale_coupon_delivery/controllers/main.py b/addons/website_sale_coupon_delivery/controllers/main.py index bd2190b1035..a04a2639eaf 100644 --- a/addons/website_sale_coupon_delivery/controllers/main.py +++ b/addons/website_sale_coupon_delivery/controllers/main.py @@ -23,3 +23,19 @@ class WebsiteSaleCouponDelivery(WebsiteSaleDelivery): 'new_amount_order_discounted': self._format_amount(order.reward_amount - amount_free_shipping, currency), }) return result + + @http.route() + def cart_carrier_rate_shipment(self, carrier_id, **kw): + order = request.website.sale_get_order(force_create=True) + free_shipping_lines = order._get_free_shipping_lines() + # Avoid computing carrier price delivery is free (coupon). It means if + # the carrier has error (eg 'delivery only for Belgium') it will show + # Free until the user clicks on it. + if free_shipping_lines: + return { + 'carrier_id': carrier_id, + 'status': True, + 'new_amount_delivery': 0.0, + 'error_message': None, + } + return super(WebsiteSaleCouponDelivery, self).cart_carrier_rate_shipment(carrier_id, **kw)