From c2b5717f3675859613b843584e77dd26ca2d2ed8 Mon Sep 17 00:00:00 2001 From: metatroncubeswdev Date: Mon, 31 Aug 2026 15:04:53 -0400 Subject: [PATCH] Apply corporate website branding on upgrade --- addons/mcs_corporate_website/__init__.py | 2 +- .../data/website_data.xml | 1 + addons/mcs_corporate_website/hooks.py | 23 +-------- .../mcs_corporate_website/models/__init__.py | 1 + .../models/website_setup.py | 49 +++++++++++++++++++ 5 files changed, 53 insertions(+), 23 deletions(-) create mode 100644 addons/mcs_corporate_website/models/website_setup.py diff --git a/addons/mcs_corporate_website/__init__.py b/addons/mcs_corporate_website/__init__.py index a247bf3..2a1d269 100644 --- a/addons/mcs_corporate_website/__init__.py +++ b/addons/mcs_corporate_website/__init__.py @@ -1,3 +1,3 @@ from . import controllers -from . import hooks from . import models +from . import hooks diff --git a/addons/mcs_corporate_website/data/website_data.xml b/addons/mcs_corporate_website/data/website_data.xml index 1142cf1..89a83b9 100644 --- a/addons/mcs_corporate_website/data/website_data.xml +++ b/addons/mcs_corporate_website/data/website_data.xml @@ -3,4 +3,5 @@ Metatroncube Workplace + diff --git a/addons/mcs_corporate_website/hooks.py b/addons/mcs_corporate_website/hooks.py index c1aac67..23fb3e8 100644 --- a/addons/mcs_corporate_website/hooks.py +++ b/addons/mcs_corporate_website/hooks.py @@ -1,6 +1,3 @@ -import base64 -from pathlib import Path - from odoo import api, SUPERUSER_ID @@ -17,22 +14,4 @@ class CorporateWebsiteSetup: self.env = env def run(self): - self._brand_website() - self._hide_duplicate_home_menu() - - def _brand_website(self): - website = self.env["website"].sudo().search([], limit=1) - if not website: - return - logo_path = Path(__file__).parent / "static" / "src" / "img" / "metatroncube-logo.png" - values = { - "name": "Metatroncube Workplace", - } - if logo_path.exists(): - values["logo"] = base64.b64encode(logo_path.read_bytes()) - website.write(values) - - def _hide_duplicate_home_menu(self): - menu = self.env.ref("mcs_corporate_website.menu_home", raise_if_not_found=False) - if menu: - menu.sudo().write({"is_visible": False}) + self.env["mcs.corporate.website.setup"].apply_corporate_branding() diff --git a/addons/mcs_corporate_website/models/__init__.py b/addons/mcs_corporate_website/models/__init__.py index 0fcb451..17c91c3 100644 --- a/addons/mcs_corporate_website/models/__init__.py +++ b/addons/mcs_corporate_website/models/__init__.py @@ -1 +1,2 @@ from . import support_ticket +from . import website_setup diff --git a/addons/mcs_corporate_website/models/website_setup.py b/addons/mcs_corporate_website/models/website_setup.py new file mode 100644 index 0000000..db37fae --- /dev/null +++ b/addons/mcs_corporate_website/models/website_setup.py @@ -0,0 +1,49 @@ +import base64 + +from odoo import models +from odoo.modules.module import get_module_resource + + +class McsCorporateWebsiteSetup(models.AbstractModel): + _name = "mcs.corporate.website.setup" + _description = "Metatroncube Corporate Website Setup" + + def apply_corporate_branding(self): + self._brand_website() + self._hide_duplicate_home_menus() + return True + + def _brand_website(self): + website = self.env["website"].sudo().search([], limit=1) + if not website: + return + values = {"name": "Metatroncube Workplace"} + logo_path = get_module_resource( + "mcs_corporate_website", + "static", + "src", + "img", + "metatroncube-logo.png", + ) + if logo_path: + with open(logo_path, "rb") as logo_file: + values["logo"] = base64.b64encode(logo_file.read()) + website.write(values) + + def _hide_duplicate_home_menus(self): + Menu = self.env["website.menu"].sudo() + home_menus = Menu.search( + [("name", "=", "Home"), ("url", "=", "/")], + order="parent_id, sequence, id", + ) + by_parent = {} + for menu in home_menus: + by_parent.setdefault(menu.parent_id.id or 0, self.env["website.menu"]) + by_parent[menu.parent_id.id or 0] |= menu + for menus in by_parent.values(): + visible_menus = menus.filtered("is_visible").sorted(lambda item: (item.sequence, item.id)) + for duplicate in visible_menus[1:]: + duplicate.is_visible = False + own_home = self.env.ref("mcs_corporate_website.menu_home", raise_if_not_found=False) + if own_home: + own_home.is_visible = False