diff --git a/cross_connect_client/models/cross_connect_server.py b/cross_connect_client/models/cross_connect_server.py index fcea3a7855..9543a5616b 100644 --- a/cross_connect_client/models/cross_connect_server.py +++ b/cross_connect_client/models/cross_connect_server.py @@ -1,7 +1,6 @@ # Copyright 2024 Akretion (http://www.akretion.com). # @author Florian Mounier # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from urllib.parse import urlparse import requests @@ -15,7 +14,8 @@ class CrossConnectServer(models.Model): _inherit = "server.env.mixin" name = fields.Char( - required=True, compute="_compute_name", readonly=False, store=True + required=True, + help="This name will be used for the new created app", ) server_url = fields.Char(required=True) api_key = fields.Char( @@ -38,15 +38,6 @@ class CrossConnectServer(models.Model): compute="_compute_web_icon_data", inverse="_inverse_web_icon_data" ) - @api.depends("server_url") - def _compute_name(self): - for record in self: - if not record.name or record.name == "/": - try: - record.name = urlparse(record.server_url).hostname - except Exception: - record.name = "/" - @api.depends("name", "group_ids") def _compute_menu_id(self): for record in self: @@ -58,7 +49,7 @@ def _compute_menu_id(self): record.menu_id = False continue - menu_groups = self.env.ref("base.group_system") | record.group_ids + menu_groups = record.group_ids if not record.menu_id: action = self.env["ir.actions.act_url"].create( @@ -143,13 +134,15 @@ def _sync_groups(self): remote_groups_ids = {remote_group["id"] for remote_group in remote_groups} self.group_ids.filtered( lambda group: group.cross_connect_server_group_id not in remote_groups_ids - ).unlink() + ).write({"cross_connect_server_id": False}) # Create or Update existing groups for remote_group in remote_groups: - existing_group = self.group_ids.filtered( - lambda group: group.cross_connect_server_group_id == remote_group["id"] + existing_group = self.env["res.groups"].search( + [("cross_connect_server_group_id", "=", remote_group["id"])] ) + if existing_group and not existing_group.cross_connect_server_id: + existing_group.write({"cross_connect_server_id": self.id}) if existing_group: existing_group.sudo().write( { @@ -173,8 +166,14 @@ def action_sync(self): def action_disable(self): for record in self: - record.group_ids.unlink() + record.group_ids.write({"cross_connect_server_id": False}) @property def _server_env_fields(self): return {"api_key": {}} + + def unlink(self): + for rec in self: + # deleting the groups will delete the menu and related action. + rec.group_ids.unlink() + return super().unlink() diff --git a/cross_connect_client/tests/test_cross_connect_client.py b/cross_connect_client/tests/test_cross_connect_client.py index e7c96dda76..c231f10f6c 100644 --- a/cross_connect_client/tests/test_cross_connect_client.py +++ b/cross_connect_client/tests/test_cross_connect_client.py @@ -38,13 +38,6 @@ def test_base(self): self.assertFalse(self.server.menu_id) self.assertFalse(self.server.web_icon_data) - def test_name(self): - self.server.name = False - self.server.server_url = "//[" - self.assertEqual(self.server.name, "/") - self.server.server_url = "https://test.example.org" - self.assertEqual(self.server.name, "test.example.org") - def test_absolute_url_for(self): self.assertEqual( self.server._absolute_url_for("test"), @@ -113,10 +106,7 @@ def test_sync(self, req): self.server.menu_id.web_icon, "cross_connect_client,static/description/web_icon_data.png", ) - self.assertEqual( - self.server.menu_id.groups_id, - self.server.group_ids | self.env.ref("base.group_system"), - ) + self.assertEqual(self.server.menu_id.groups_id, self.server.group_ids) self.assertTrue(self.server.menu_id.action.name, "Test Server") self.assertEqual( self.server.menu_id.action.url, f"/cross_connect_server/{self.server.id}" diff --git a/cross_connect_client/views/cross_connect_server_views.xml b/cross_connect_client/views/cross_connect_server_views.xml index 9c317a1220..55d31e8a21 100644 --- a/cross_connect_client/views/cross_connect_server_views.xml +++ b/cross_connect_client/views/cross_connect_server_views.xml @@ -38,7 +38,7 @@ bg_color="bg-warning" attrs="{'invisible': [('group_ids', '!=', [])]}" /> -
+