From bb7b23b0be6032ae1e57c28dd7e6a381e2654c7d Mon Sep 17 00:00:00 2001 From: "Antoine (ande)" Date: Fri, 29 Sep 2023 16:33:43 +0000 Subject: [PATCH] [FIX] l10n_de: xmlrpc call can't get account.move Current behaviour: When making a xmlrpc call without fields using: models.execute_kw( db, uid, password, 'account.move', 'search_read', [[['name', '=', "INV/2023/00001"]]]) the client receives a traceback ending with: TypeError: cannot marshal objects\n'> Steps to reproduce: 1. install any of the l10n_de_... modules 2. Make a xmlrpc call like stated above 3. Traceback like stated above Cause of the issue: The field l10n_de_addresses is used to store (_("Invoicing Address:"), record.partner_id) Which isn't serialized correctly: record.partner_id is not repr (is python object instead of (6, 'something')) Fix: Applied a fix similar to https://github.com/odoo/odoo/commit/602b3f3d39db29fbcd90e3f734bdcc73e67f175d opw-3248887 closes odoo/odoo#139095 X-original-commit: 46adfb32567ac364b5f3916f50ad47af4142163b Signed-off-by: Cedric Snauwaert Signed-off-by: Antoine Demany (ande) Co-authored-by: Julien Castiaux --- addons/l10n_din5008/models/account_move.py | 8 +++++++- addons/l10n_din5008_purchase/models/purchase.py | 8 +++++++- addons/l10n_din5008_sale/models/sale.py | 8 +++++++- addons/l10n_din5008_stock/models/stock.py | 8 +++++++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/addons/l10n_din5008/models/account_move.py b/addons/l10n_din5008/models/account_move.py index f21fb3de259..8dbdf0c6098 100644 --- a/addons/l10n_din5008/models/account_move.py +++ b/addons/l10n_din5008/models/account_move.py @@ -7,7 +7,7 @@ class AccountMove(models.Model): l10n_din5008_template_data = fields.Binary(compute='_compute_l10n_din5008_template_data') l10n_din5008_document_title = fields.Char(compute='_compute_l10n_din5008_document_title') - l10n_din5008_addresses = fields.Binary(compute='_compute_l10n_din5008_addresses') + l10n_din5008_addresses = fields.Binary(compute='_compute_l10n_din5008_addresses', exportable=False) def _compute_l10n_din5008_template_data(self): for record in self: @@ -52,3 +52,9 @@ class AccountMove(models.Model): else: data.append((_("Shipping Address:"), record.partner_shipping_id)) data.append((_("Invoicing Address:"), record.partner_id)) + + def check_field_access_rights(self, operation, field_names): + field_names = super().check_field_access_rights(operation, field_names) + return [field_name for field_name in field_names if field_name not in { + 'l10n_din5008_addresses', + }] diff --git a/addons/l10n_din5008_purchase/models/purchase.py b/addons/l10n_din5008_purchase/models/purchase.py index 8502233b248..2ddd250ef36 100644 --- a/addons/l10n_din5008_purchase/models/purchase.py +++ b/addons/l10n_din5008_purchase/models/purchase.py @@ -7,7 +7,7 @@ class PurchaseOrder(models.Model): l10n_din5008_template_data = fields.Binary(compute='_compute_l10n_din5008_template_data') l10n_din5008_document_title = fields.Char(compute='_compute_l10n_din5008_document_title') - l10n_din5008_addresses = fields.Binary(compute='_compute_l10n_din5008_addresses') + l10n_din5008_addresses = fields.Binary(compute='_compute_l10n_din5008_addresses', exportable=False) def _compute_l10n_din5008_template_data(self): for record in self: @@ -48,3 +48,9 @@ class PurchaseOrder(models.Model): data.append((_("Shipping Address:"), record.dest_address_id)) elif 'picking_type_id' in record._fields and record.picking_type_id.warehouse_id: data.append((_("Shipping Address:"), record.picking_type_id.warehouse_id.partner_id)) + + def check_field_access_rights(self, operation, field_names): + field_names = super().check_field_access_rights(operation, field_names) + return [field_name for field_name in field_names if field_name not in { + 'l10n_din5008_addresses', + }] diff --git a/addons/l10n_din5008_sale/models/sale.py b/addons/l10n_din5008_sale/models/sale.py index f25fd6db1b4..2eae72fa807 100644 --- a/addons/l10n_din5008_sale/models/sale.py +++ b/addons/l10n_din5008_sale/models/sale.py @@ -7,7 +7,7 @@ class SaleOrder(models.Model): l10n_din5008_template_data = fields.Binary(compute='_compute_l10n_din5008_template_data') l10n_din5008_document_title = fields.Char(compute='_compute_l10n_din5008_document_title') - l10n_din5008_addresses = fields.Binary(compute='_compute_l10n_din5008_addresses') + l10n_din5008_addresses = fields.Binary(compute='_compute_l10n_din5008_addresses', exportable=False) def _compute_l10n_din5008_template_data(self): for record in self: @@ -48,3 +48,9 @@ class SaleOrder(models.Model): else: data.append((_("Shipping Address:"), record.partner_shipping_id)) data.append((_("Invoicing Address:"), record.partner_invoice_id)) + + def check_field_access_rights(self, operation, field_names): + field_names = super().check_field_access_rights(operation, field_names) + return [field_name for field_name in field_names if field_name not in { + 'l10n_din5008_addresses', + }] diff --git a/addons/l10n_din5008_stock/models/stock.py b/addons/l10n_din5008_stock/models/stock.py index 7cad27b9145..54c4d1de669 100644 --- a/addons/l10n_din5008_stock/models/stock.py +++ b/addons/l10n_din5008_stock/models/stock.py @@ -5,7 +5,7 @@ from odoo.tools import format_date class StockPicking(models.Model): _inherit = 'stock.picking' - l10n_din5008_addresses = fields.Binary(compute='_compute_l10n_din5008_addresses') + l10n_din5008_addresses = fields.Binary(compute='_compute_l10n_din5008_addresses', exportable=False) def _compute_l10n_din5008_addresses(self): for record in self: @@ -18,3 +18,9 @@ class StockPicking(models.Model): if record.picking_type_id.code == 'outgoing' and record.move_ids_without_package and record.move_ids_without_package[0].partner_id \ and record.move_ids_without_package[0].partner_id.id != record.partner_id.id: data.append((_('Customer Address:'), record.partner_id)) + + def check_field_access_rights(self, operation, field_names): + field_names = super().check_field_access_rights(operation, field_names) + return [field_name for field_name in field_names if field_name not in { + 'l10n_din5008_addresses', + }]