From 3c96abe38bb162e2a26d6ed80bcdbe260c3e0eb4 Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Thu, 12 Nov 2020 14:06:16 +0000 Subject: [PATCH] [FIX] website_sale_delivery: free delivery with free product - Install eCommerce - Website > Products - Create a product with a Sales Price of 0 and publish it - Website > Configuration - Enable "Shipping Costs" - Go to Configuration / eCommerce / Shipping Methods - Create a new method with a fixed price of zero - Go to the ecommerce - Add the free product of in the cart - Process Checkout A traceback appears. It happens because the 'Pay' button: https://github.com/odoo/odoo/blob/b64a7924044f012da49db178b6c02fdf9b47bc5c/addons/payment/views/payment_templates.xml#L149-L158 is replaced by: https://github.com/odoo/odoo/blob/b64a7924044f012da49db178b6c02fdf9b47bc5c/addons/website_sale/views/templates.xml#L1401-L1409 Since `$payButton.data('disabled_reasons')` is `undefined`, a crash occurs. We make the code more robust by using the same logic than: https://github.com/odoo/odoo/blob/b64a7924044f012da49db178b6c02fdf9b47bc5c/addons/website_sale/static/src/js/website_sale_payment.js#L30-L32 opw-2380774 closes odoo/odoo#61693 X-original-commit: 3ba37c70c84b8651a544fbaf45dbfb5bc85bdbed Signed-off-by: Nicolas Martinelli (nim) --- .../static/src/js/website_sale_delivery.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/addons/website_sale_delivery/static/src/js/website_sale_delivery.js b/addons/website_sale_delivery/static/src/js/website_sale_delivery.js index 883a45ff5f8..07bcdb5e9d6 100644 --- a/addons/website_sale_delivery/static/src/js/website_sale_delivery.js +++ b/addons/website_sale_delivery/static/src/js/website_sale_delivery.js @@ -28,8 +28,9 @@ publicWidget.registry.websiteSaleDelivery = publicWidget.Widget.extend({ if ($carriers.length > 0) { if ($carriers.filter(':checked').length === 0) { $payButton.prop('disabled', true); - $payButton.data('disabled_reasons', $payButton.data('disabled_reasons') || {}); - $payButton.data('disabled_reasons').carrier_selection = true; + var disabledReasons = $payButton.data('disabled_reasons') || {}; + disabledReasons.carrier_selection = true; + $payButton.data('disabled_reasons', disabledReasons); } $carriers.filter(':checked').click(); } @@ -76,7 +77,9 @@ publicWidget.registry.websiteSaleDelivery = publicWidget.Widget.extend({ $amountUntaxed.html(result.new_amount_untaxed); $amountTax.html(result.new_amount_tax); $amountTotal.html(result.new_amount_total); - $payButton.data('disabled_reasons').carrier_selection = false; + var disabledReasons = $payButton.data('disabled_reasons') || {}; + disabledReasons.carrier_selection = false; + $payButton.data('disabled_reasons', disabledReasons); $payButton.prop('disabled', _.contains($payButton.data('disabled_reasons'), true)); } else { $amountDelivery.html(result.new_amount_delivery); @@ -120,8 +123,9 @@ publicWidget.registry.websiteSaleDelivery = publicWidget.Widget.extend({ $radio.prop("checked", true); var $payButton = $('#o_payment_form_pay'); $payButton.prop('disabled', true); - $payButton.data('disabled_reasons', $payButton.data('disabled_reasons') || {}); - $payButton.data('disabled_reasons').carrier_selection = true; + var disabledReasons = $payButton.data('disabled_reasons') || {}; + disabledReasons.carrier_selection = true; + $payButton.data('disabled_reasons', disabledReasons); dp.add(this._rpc({ route: '/shop/update_carrier', params: {