11# Copyright 2024 Akretion (http://www.akretion.com).
22# @author Florian Mounier <florian.mounier@akretion.com>
33# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4- from urllib .parse import urlparse
54
65import requests
76
@@ -15,7 +14,8 @@ class CrossConnectServer(models.Model):
1514 _inherit = "server.env.mixin"
1615
1716 name = fields .Char (
18- required = True , compute = "_compute_name" , readonly = False , store = True
17+ required = True ,
18+ help = "This name will be used for the new created app" ,
1919 )
2020 server_url = fields .Char (required = True )
2121 api_key = fields .Char (
@@ -38,15 +38,6 @@ class CrossConnectServer(models.Model):
3838 compute = "_compute_web_icon_data" , inverse = "_inverse_web_icon_data"
3939 )
4040
41- @api .depends ("server_url" )
42- def _compute_name (self ):
43- for record in self :
44- if not record .name or record .name == "/" :
45- try :
46- record .name = urlparse (record .server_url ).hostname
47- except Exception :
48- record .name = "/"
49-
5041 @api .depends ("name" , "group_ids" )
5142 def _compute_menu_id (self ):
5243 for record in self :
@@ -58,7 +49,7 @@ def _compute_menu_id(self):
5849 record .menu_id = False
5950 continue
6051
61- menu_groups = self . env . ref ( "base.group_system" ) | record .group_ids
52+ menu_groups = record .group_ids
6253
6354 if not record .menu_id :
6455 action = self .env ["ir.actions.act_url" ].create (
@@ -143,13 +134,15 @@ def _sync_groups(self):
143134 remote_groups_ids = {remote_group ["id" ] for remote_group in remote_groups }
144135 self .group_ids .filtered (
145136 lambda group : group .cross_connect_server_group_id not in remote_groups_ids
146- ).unlink ( )
137+ ).write ({ "cross_connect_server_id" : False } )
147138
148139 # Create or Update existing groups
149140 for remote_group in remote_groups :
150- existing_group = self .group_ids . filtered (
151- lambda group : group . cross_connect_server_group_id == remote_group ["id" ]
141+ existing_group = self .env [ "res.groups" ]. search (
142+ [( " cross_connect_server_group_id" , "=" , remote_group ["id" ]) ]
152143 )
144+ if existing_group and not existing_group .cross_connect_server_id :
145+ existing_group .write ({"cross_connect_server_id" : self .id })
153146 if existing_group :
154147 existing_group .sudo ().write (
155148 {
@@ -173,8 +166,14 @@ def action_sync(self):
173166
174167 def action_disable (self ):
175168 for record in self :
176- record .group_ids .unlink ( )
169+ record .group_ids .write ({ "cross_connect_server_id" : False } )
177170
178171 @property
179172 def _server_env_fields (self ):
180173 return {"api_key" : {}}
174+
175+ def unlink (self ):
176+ for rec in self :
177+ # deleting the groups will delete the menu and related action.
178+ rec .group_ids .unlink ()
179+ return super ().unlink ()
0 commit comments