From e70119635fe10a287c7c7d8682dfcc7ce8b894bd Mon Sep 17 00:00:00 2001 From: "Nasreddin (bon)" Date: Mon, 19 Oct 2020 11:59:41 +0000 Subject: [PATCH] [FIX] payment: User can pay without selecting a delivery method Issue - Install "eCommerce" and "Inventoy" - Activate "Fedex" delivery connector in settings - Publish "Free Delivery" and "Fedex US" delivery method - Put the "FedEx" one above the "Free Delivery" - Go to shop and add an item to cart - Set an adress with no ZIP code and checkout - Select a payment methode and pay Order is generated without selecting a delivery method Same behavior happend when using only "Fedex" as delivery method. Cause The flow make the `payment.payment_form` trigger start after `website_sale_delivery.checkout` JS module. In 'start' function of `payment.payment_form`, the `disabled` attribut is removed from button if no checkbox_cgv is present and therefore break the `disabling` managemet since `disabledReasons` payButton data are not sync anymore. Solution Remove 'disabled' attribut only if has `disabledReasons` data on payButton (checkbox_cgv feature alter `disabledReasons`). opw-2355407 opw-2357605 closes odoo/odoo#60359 X-original-commit: 04e589e80b3ef48640f275cb20d31c17c2126c69 Signed-off-by: bon-odoo --- addons/payment/static/src/js/payment_form.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/addons/payment/static/src/js/payment_form.js b/addons/payment/static/src/js/payment_form.js index 67ac150e10a..2138082f1de 100644 --- a/addons/payment/static/src/js/payment_form.js +++ b/addons/payment/static/src/js/payment_form.js @@ -22,9 +22,7 @@ publicWidget.registry.PaymentForm = publicWidget.Widget.extend({ * @override */ start: function () { - if(!$('#checkbox_cgv').length){ - $("#o_payment_form_pay").removeAttr('disabled'); - } + this._adaptPayButton(); var self = this; return this._super.apply(this, arguments).then(function () { self.options = _.extend(self.$el.data(), self.options); @@ -148,6 +146,11 @@ publicWidget.registry.PaymentForm = publicWidget.Widget.extend({ } return e.message.data.arguments[0]; }, + _adaptPayButton: function () { + var $payButton = $("#o_payment_form_pay"); + var disabledReasons = $payButton.data('disabled_reasons') || {}; + $payButton.prop('disabled', _.contains(disabledReasons, true)); + }, //-------------------------------------------------------------------------- // Handlers