diff --git a/addons/crm/models/ir_config_parameter.py b/addons/crm/models/ir_config_parameter.py index af74a83e2724a0acb866568c4c7ad21209cc1a22..74d1e7ab197a309dee353c2d6416bc2a914a3543 100644 --- a/addons/crm/models/ir_config_parameter.py +++ b/addons/crm/models/ir_config_parameter.py @@ -2,6 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, models +from odoo.addons.base.models.ir_model import MODULE_UNINSTALL_FLAG class IrConfigParameter(models.Model): @@ -25,7 +26,7 @@ class IrConfigParameter(models.Model): def unlink(self): pls_emptied = any(record.key == "crm.pls_fields" for record in self) result = super(IrConfigParameter, self).unlink() - if pls_emptied: + if pls_emptied and not self._context.get(MODULE_UNINSTALL_FLAG): self.flush() self.env.registry.setup_models(self.env.cr) - return pls_emptied + return result diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index 9d00322a9712344973a3952b54179e24d8d09430..7615388bdaab5fe183d8c4fcfc23572b85523089 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -771,7 +771,8 @@ class IrModelFields(models.Model): if inverse.manual and inverse.type == 'one2many': failed_dependencies.append((field, inverse)) - if not self._context.get(MODULE_UNINSTALL_FLAG) and failed_dependencies: + uninstalling = self._context.get(MODULE_UNINSTALL_FLAG) + if not uninstalling and failed_dependencies: msg = _("The field '%s' cannot be removed because the field '%s' depends on it.") raise UserError(msg % failed_dependencies[0]) elif failed_dependencies: @@ -797,7 +798,7 @@ class IrModelFields(models.Model): for view in views: view._check_xml() except Exception: - if not self._context.get(MODULE_UNINSTALL_FLAG): + if not uninstalling: raise UserError("\n".join([ _("Cannot rename/delete fields that are still present in views:"), _("Fields: %s") % ", ".join(str(f) for f in fields), @@ -809,8 +810,9 @@ class IrModelFields(models.Model): + ", ".join(str(f) for f in fields) + " the following view might be broken %s" % view.name) finally: - # the registry has been modified, restore it - self.pool.setup_models(self._cr) + if not uninstalling: + # the registry has been modified, restore it + self.pool.setup_models(self._cr) @api.ondelete(at_uninstall=False) def _unlink_if_manual(self):