[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) <nim@odoo.com>
This commit is contained in:
Nicolas Martinelli
2020-11-12 18:03:20 +00:00
parent eaf0d9f8ed
commit 3c96abe38b
@@ -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: {