"""Coexistence group membership recomputation.""" from odoo import api, models class ResUsers(models.Model): _inherit = "res.users" @api.model def _fusion_recompute_coexistence_group(self): """Maintain the two coexistence groups based on Enterprise presence. - ``group_fusion_show_when_enterprise_absent``: members = all internal users when NO Enterprise accounting module is installed. Used to unhide Fusion menus that would conflict with Enterprise UIs. - ``group_fusion_show_when_enterprise_present``: members = all internal users when AT LEAST ONE Enterprise accounting module IS installed. Used to hide migration/transitional UIs once Enterprise has been uninstalled (so the user doesn't see "Migrate from Enterprise" with nothing to migrate). The two groups are mutually exclusive at any moment in time, but a user can transition between them as Enterprise modules are installed or uninstalled. Idempotent; safe to call multiple times. Called from ir.module.module.button_immediate_install / uninstall overrides. """ absent_group = self.env.ref( 'fusion_accounting_core.group_fusion_show_when_enterprise_absent', raise_if_not_found=False, ) present_group = self.env.ref( 'fusion_accounting_core.group_fusion_show_when_enterprise_present', raise_if_not_found=False, ) if not absent_group and not present_group: return enterprise_installed = self.env['ir.module.module']._fusion_is_enterprise_accounting_installed() all_internal = self.sudo().search([('share', '=', False)]) if enterprise_installed: if absent_group: absent_group.sudo().write({'user_ids': [(5, 0, 0)]}) if present_group: present_group.sudo().write({'user_ids': [(6, 0, all_internal.ids)]}) else: if absent_group: absent_group.sudo().write({'user_ids': [(6, 0, all_internal.ids)]}) if present_group: present_group.sudo().write({'user_ids': [(5, 0, 0)]})