From 985c224e2f0fb4e3064db354c3fbb92b9a188918 Mon Sep 17 00:00:00 2001 From: Adrian Torres Date: Mon, 5 Feb 2018 09:25:08 +0100 Subject: [PATCH] [FIX] sale_management,account_invoicing: proper uninstall Previous to this commit, installing sale_managmenet/account_invoicing would add some menu items for the `sale/account` module (which contains all the logic for the sale/accounting flow) and it would also install sale/account since it's a dependency, however, horror would strike if one were to go and uninstall sale_management/account_invoicing: nothing happens! This is because these "facade" modules don't actually install anything, and uninstalling an app does not force the uninstallation of its dependencies, thus the `sale/account` module would stay installed, along with the views introduced by the "facade" module. To fix this, we create an uninstall_hook which forces the removal of the ir.ui.menus that the "facade" modules introduce, so that the functionality remains (for modules that depend on it) but it's not user-accessible (because it should only be accessible to users if the facade module is installed). --- addons/account_invoicing/__init__.py | 11 +++++++++++ addons/account_invoicing/__manifest__.py | 1 + addons/sale_management/__init__.py | 11 +++++++++++ addons/sale_management/__manifest__.py | 1 + 4 files changed, 24 insertions(+) diff --git a/addons/account_invoicing/__init__.py b/addons/account_invoicing/__init__.py index 67dee8c60db..91206cf6094 100644 --- a/addons/account_invoicing/__init__.py +++ b/addons/account_invoicing/__init__.py @@ -1,2 +1,13 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.api import Environment, SUPERUSER_ID + + +def uninstall_hook(cr, registry): + env = Environment(cr, SUPERUSER_ID, {}) + res_ids = env['ir.model.data'].search([ + ('model', '=', 'ir.ui.menu'), + ('module', '=', 'account') + ]).mapped('res_id') + env['ir.ui.menu'].browse(res_ids).update({'active': False}) diff --git a/addons/account_invoicing/__manifest__.py b/addons/account_invoicing/__manifest__.py index 038e76dfb08..103f72fdd12 100644 --- a/addons/account_invoicing/__manifest__.py +++ b/addons/account_invoicing/__manifest__.py @@ -28,4 +28,5 @@ You could use this simplified accounting in case you work with an (external) acc 'qweb': [ ], 'application': True, + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/sale_management/__init__.py b/addons/sale_management/__init__.py index 67dee8c60db..1b2e5977577 100644 --- a/addons/sale_management/__init__.py +++ b/addons/sale_management/__init__.py @@ -1,2 +1,13 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.api import Environment, SUPERUSER_ID + + +def uninstall_hook(cr, registry): + env = Environment(cr, SUPERUSER_ID, {}) + res_ids = env['ir.model.data'].search([ + ('model', '=', 'ir.ui.menu'), + ('module', '=', 'sale') + ]).mapped('res_id') + env['ir.ui.menu'].browse(res_ids).update({'active': False}) diff --git a/addons/sale_management/__manifest__.py b/addons/sale_management/__manifest__.py index b498649e819..4202ac31f78 100644 --- a/addons/sale_management/__manifest__.py +++ b/addons/sale_management/__manifest__.py @@ -47,4 +47,5 @@ The Dashboard for the Sales Manager will include 'views/sale_management_templates.xml', ], 'application': True, + 'uninstall_hook': 'uninstall_hook', }