From 5a431ff23ec00c1135c8b67040f258225ba1a84d Mon Sep 17 00:00:00 2001 From: lejeune quentin Date: Mon, 8 Nov 2021 09:15:54 +0000 Subject: [PATCH] [FIX] pos_adyen: Fix the last status deleted Actually the last status is deleted by the fist request who can reach it So if a request is lost the answer too With this fix we delete the last response only when we start a new one closes odoo/odoo#79706 X-original-commit: 63abab836d95df9a45f6f7d038bb18df88f864b4 Signed-off-by: Quentin Lejeune (qle) --- addons/pos_adyen/models/pos_payment_method.py | 4 +++- addons/pos_adyen/static/src/js/payment_adyen.js | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/addons/pos_adyen/models/pos_payment_method.py b/addons/pos_adyen/models/pos_payment_method.py index a4cc6e1b04c..b49f43e4a46 100644 --- a/addons/pos_adyen/models/pos_payment_method.py +++ b/addons/pos_adyen/models/pos_payment_method.py @@ -78,7 +78,6 @@ class PosPaymentMethod(models.Model): latest_response = self.sudo().adyen_latest_response latest_response = json.loads(latest_response) if latest_response else False - self.sudo().adyen_latest_response = '' # avoid handling old responses multiple times return { 'latest_response': latest_response, @@ -87,6 +86,9 @@ class PosPaymentMethod(models.Model): def proxy_adyen_request(self, data, operation=False): ''' Necessary because Adyen's endpoints don't have CORS enabled ''' + if data['SaleToPOIRequest']['MessageHeader']['MessageCategory'] == 'Payment': # Clear only if it is a payment request + self.sudo().adyen_latest_response = '' # avoid handling old responses multiple times + if not operation: operation = 'terminal_request' diff --git a/addons/pos_adyen/static/src/js/payment_adyen.js b/addons/pos_adyen/static/src/js/payment_adyen.js index d4901628235..6efb71ec444 100644 --- a/addons/pos_adyen/static/src/js/payment_adyen.js +++ b/addons/pos_adyen/static/src/js/payment_adyen.js @@ -197,6 +197,9 @@ var PaymentAdyen = PaymentInterface.extend({ self.poll_error_order = self.pos.get_order(); return self._handle_odoo_connection_failure(data); } + // This is to make sure that if 'data' is not an instance of Error (i.e. timeout error), + // this promise don't resolve -- that is, it doesn't go to the 'then' clause. + return Promise.reject(data); }).then(function (status) { var notification = status.latest_response; var last_diagnosis_service_id = status.last_received_diagnosis_id; @@ -302,7 +305,7 @@ var PaymentAdyen = PaymentInterface.extend({ self.polling = setInterval(function () { self._poll_for_response(resolve, reject); - }, 3000); + }, 5500); }); // make sure to stop polling when we're done