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