From b34fbfafe32ad1a7a482841d81b83d1ebfc203d3 Mon Sep 17 00:00:00 2001 From: nobuQuartile Date: Wed, 18 Feb 2026 07:06:45 +0000 Subject: [PATCH 1/2] [6341][FIX]web_widget_open_tab --- web_widget_open_tab/models/ir_ui_view.py | 30 +++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/web_widget_open_tab/models/ir_ui_view.py b/web_widget_open_tab/models/ir_ui_view.py index d85cb57..098d21a 100644 --- a/web_widget_open_tab/models/ir_ui_view.py +++ b/web_widget_open_tab/models/ir_ui_view.py @@ -16,23 +16,25 @@ def _get_name_field(self, tree): return tree.xpath('./field[@name="name"]') @api.model - def fields_view_get( + def _fields_view_get( self, view_id=None, view_type="form", toolbar=False, submenu=False ): - res = super(Base, self).fields_view_get( + res = super(Base, self)._fields_view_get( view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu ) - arch = etree.fromstring(res["arch"]) - model = self.env["ir.model"]._get(self._name) - if view_type == "tree" and model.add_open_tab_field: - id_elem = """""" - id_elem = etree.fromstring(id_elem) - tree = arch.xpath("//tree")[0] - name_field = self._get_name_field(tree) - if name_field: + if view_type == "tree": + model = self.env["ir.model"]._get(self._name) + if model.add_open_tab_field and res.get("arch"): + arch = etree.fromstring(res["arch"]) + id_elem = """""" + id_elem = etree.fromstring(id_elem) tree = arch.xpath("//tree")[0] - tree.insert(name_field[0].getparent().index(name_field[0]) + 1, id_elem) - else: - tree.insert(0, id_elem) - res["arch"] = etree.tostring(arch, encoding="utf-8") + name_field = self._get_name_field(tree) + if name_field: + tree.insert( + name_field[0].getparent().index(name_field[0]) + 1, id_elem + ) + else: + tree.insert(0, id_elem) + res["arch"] = etree.tostring(arch, encoding="unicode") return res From 81b886db5e557cfa3aa144f7ba4ea64b9424ab3e Mon Sep 17 00:00:00 2001 From: nobuQuartile Date: Thu, 19 Feb 2026 08:26:14 +0000 Subject: [PATCH 2/2] upd the code to Lin-san's one --- web_widget_open_tab/models/ir_ui_view.py | 34 ++++++++++++------------ 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/web_widget_open_tab/models/ir_ui_view.py b/web_widget_open_tab/models/ir_ui_view.py index 098d21a..9da7f9c 100644 --- a/web_widget_open_tab/models/ir_ui_view.py +++ b/web_widget_open_tab/models/ir_ui_view.py @@ -16,25 +16,25 @@ def _get_name_field(self, tree): return tree.xpath('./field[@name="name"]') @api.model - def _fields_view_get( + def fields_view_get( self, view_id=None, view_type="form", toolbar=False, submenu=False ): - res = super(Base, self)._fields_view_get( + res = super(Base, self).fields_view_get( view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu ) - if view_type == "tree": - model = self.env["ir.model"]._get(self._name) - if model.add_open_tab_field and res.get("arch"): - arch = etree.fromstring(res["arch"]) - id_elem = """""" - id_elem = etree.fromstring(id_elem) - tree = arch.xpath("//tree")[0] - name_field = self._get_name_field(tree) - if name_field: - tree.insert( - name_field[0].getparent().index(name_field[0]) + 1, id_elem - ) - else: - tree.insert(0, id_elem) - res["arch"] = etree.tostring(arch, encoding="unicode") + arch = etree.fromstring(res["arch"]) + model = self.env["ir.model"]._get(self._name) + if view_type == "tree" and model.add_open_tab_field: + res.setdefault("fields", {}) + if "id" not in res["fields"]: + res["fields"].update(self.fields_get(["id"])) + id_elem = """""" + id_elem = etree.fromstring(id_elem) + tree = arch.xpath("//tree")[0] + name_field = self._get_name_field(tree) + if name_field: + tree.insert(name_field[0].getparent().index(name_field[0]) + 1, id_elem) + else: + tree.insert(0, id_elem) + res["arch"] = etree.tostring(arch, encoding="utf-8") return res