From a48353d60244ef61da0d4ea261efb898b64a6dd2 Mon Sep 17 00:00:00 2001 From: "Pedram (pebr)" Date: Fri, 26 Jan 2024 16:31:52 +0100 Subject: [PATCH] [FIX] pos_self_order: prevent error with online payment method Prior to this commit, using an online payment method with an image in self-ordering mode resulted in an issue preventing the opening of the mobile menu. The specific error encountered was: `TypeError: Object of type bytes is not JSON serializable` This issue arose due to the image field being of type bytes. Since the image field is not necessary for self-ordering, this commit addresses the problem by preventing the loading of the image for a payment method, resolving the serialization error. opw-3624798 closes odoo/odoo#151388 Signed-off-by: Joseph Caburnay (jcb) --- .../pos_online_payment_self_order/models/pos_config.py | 3 +-- addons/pos_self_order/models/pos_config.py | 9 +++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/addons/pos_online_payment_self_order/models/pos_config.py b/addons/pos_online_payment_self_order/models/pos_config.py index 4e3acb01db5..5679354a8de 100644 --- a/addons/pos_online_payment_self_order/models/pos_config.py +++ b/addons/pos_online_payment_self_order/models/pos_config.py @@ -18,8 +18,7 @@ class PosConfig(models.Model): def _get_self_ordering_data(self): res = super()._get_self_ordering_data() - payment_search_params = self.current_session_id._loader_params_pos_payment_method() - payment_methods = self.self_order_online_payment_method_id.read(payment_search_params['search_params']['fields']) + payment_methods = self._get_self_ordering_payment_methods_data(self.self_order_online_payment_method_id) res['pos_payment_methods'] += payment_methods return res diff --git a/addons/pos_self_order/models/pos_config.py b/addons/pos_self_order/models/pos_config.py index 8f205727e32..d7dff16cec8 100644 --- a/addons/pos_self_order/models/pos_config.py +++ b/addons/pos_self_order/models/pos_config.py @@ -331,10 +331,15 @@ class PosConfig(models.Model): } return printerData + def _get_self_ordering_payment_methods_data(self, payment_methods): + excluded_fields = ['image'] + payment_search_fields = self.current_session_id._loader_params_pos_payment_method()['search_params']['fields'] + filtered_fields = [field for field in payment_search_fields if field not in excluded_fields] + return payment_methods.read(filtered_fields) + def _get_self_ordering_data(self): self.ensure_one() - payment_search_params = self.current_session_id._loader_params_pos_payment_method() - payment_methods = self._get_allowed_payment_methods().read(payment_search_params['search_params']['fields']) + payment_methods = self._get_self_ordering_payment_methods_data(self._get_allowed_payment_methods()) default_language = self.self_ordering_default_language_id.read(["code", "name", "iso_code", "flag_image_url"]) return {