diff --git a/addons/website_theme_install/models/ir_module_module.py b/addons/website_theme_install/models/ir_module_module.py index 316cb45331b..b9239df97e9 100644 --- a/addons/website_theme_install/models/ir_module_module.py +++ b/addons/website_theme_install/models/ir_module_module.py @@ -189,7 +189,6 @@ class IrModuleModule(models.Model): ON CONFLICT DO NOTHING""", (dst_field, new_rec.id, src_field, old_rec.id)) - def _theme_load(self, website): """ For every type of model in ``self._theme_model_names``, and for every theme in ``self``: diff --git a/addons/website_theme_install/models/theme_models.py b/addons/website_theme_install/models/theme_models.py index 965ead35d00..0c5da7e03f3 100644 --- a/addons/website_theme_install/models/theme_models.py +++ b/addons/website_theme_install/models/theme_models.py @@ -40,6 +40,14 @@ class ThemeView(models.Model): # inherit_id not yet created, add to the queue return False + if inherit and inherit.website_id != website: + website_specific_inherit = self.env['ir.ui.view'].with_context(active_test=False).search([ + ('key', '=', inherit.key), + ('website_id', '=', website.id) + ], limit=1) + if website_specific_inherit: + inherit = website_specific_inherit + new_view = { 'type': self.type or 'qweb', 'name': self.name, diff --git a/addons/website_theme_install/tests/test_views.py b/addons/website_theme_install/tests/test_views.py index 42be90dfbd5..2a660091a49 100644 --- a/addons/website_theme_install/tests/test_views.py +++ b/addons/website_theme_install/tests/test_views.py @@ -1,7 +1,57 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo.tests import HttpCase +from odoo.tests import HttpCase, tagged, TransactionCase + + +@tagged('post_install', '-at_install') +class TestViews(TransactionCase): + def test_inherit_specific(self): + View = self.env['ir.ui.view'] + Website = self.env['website'] + + website_1 = Website.create({'name': 'Website 1'}) + + # 1. Simulate COW structure + main_view = View.create({ + 'name': 'Test Main View', + 'type': 'qweb', + 'arch': '
Arch is not relevant for this test', + 'key': '_test.main_view', + }).with_context(load_all_views=True) + # Trigger COW + main_view.with_context(website_id=website_1.id).arch = 'specific' + + # 2. Simulate a theme install with a child view of `main_view` + test_theme_module = self.env['ir.module.module'].create({'name': 'test_theme'}) + self.env['ir.model.data'].create({ + 'module': 'base', + 'name': 'module_test_theme_module', + 'model': 'ir.module.module', + 'res_id': test_theme_module.id, + }) + theme_view = self.env['theme.ir.ui.view'].with_context(install_filename='/testviews').create({ + 'name': 'Test Child View', + 'mode': 'extension', + 'inherit_id': 'ir.ui.view,%s' % main_view.id, + 'arch': '