summaryrefslogtreecommitdiff
path: root/odoo/addons/base/models/ir_module.py
diff options
context:
space:
mode:
authorRaphael Collet <rco@odoo.com>2019-08-23 11:32:22 +0000
committerRaphael Collet <rco@odoo.com>2019-08-26 14:14:55 +0000
commit6f1dde1c38a21bdc717e78cab629bc2c12a034d9 (patch)
tree60e3a2553eec9f44d448c043dd85bf62f936cb3b /odoo/addons/base/models/ir_module.py
parente5c6904a4002b48a7194f692d8aa3988fb3301a6 (diff)
[FIX] ir_module: missing dependencies
The fields `ir.module.module.dependency.state` and `ir.module.module.exclusion.state` were not recomputed when the state of their corresponding module was modified. Add the missing dependencies, and make them searchable.
Diffstat (limited to 'odoo/addons/base/models/ir_module.py')
-rw-r--r--odoo/addons/base/models/ir_module.py20
1 files changed, 17 insertions, 3 deletions
diff --git a/odoo/addons/base/models/ir_module.py b/odoo/addons/base/models/ir_module.py
index 49a1659de77..4ac31630dc7 100644
--- a/odoo/addons/base/models/ir_module.py
+++ b/odoo/addons/base/models/ir_module.py
@@ -919,7 +919,8 @@ class ModuleDependency(models.Model):
module_id = fields.Many2one('ir.module.module', 'Module', ondelete='cascade')
# the module corresponding to the dependency, and its status
- depend_id = fields.Many2one('ir.module.module', 'Dependency', compute='_compute_depend')
+ depend_id = fields.Many2one('ir.module.module', 'Dependency',
+ compute='_compute_depend', search='_search_depend')
state = fields.Selection(DEP_STATES, string='Status', compute='_compute_state')
auto_install_required = fields.Boolean(
@@ -938,6 +939,12 @@ class ModuleDependency(models.Model):
for dep in self:
dep.depend_id = name_mod.get(dep.name)
+ def _search_depend(self, operator, value):
+ assert operator == 'in'
+ modules = self.env['ir.module.module'].browse(set(value))
+ return [('name', 'in', modules.mapped('name'))]
+
+ @api.depends('depend_id.state')
def _compute_state(self):
for dependency in self:
dependency.state = dependency.depend_id.state or 'unknown'
@@ -953,8 +960,9 @@ class ModuleExclusion(models.Model):
# the module that excludes it
module_id = fields.Many2one('ir.module.module', 'Module', ondelete='cascade')
- # the module corresponding to the exclusion, and its status, must be stored as it's used in a @depends
- exclusion_id = fields.Many2one('ir.module.module', 'Exclusion Module', compute='_compute_exclusion')
+ # the module corresponding to the exclusion, and its status
+ exclusion_id = fields.Many2one('ir.module.module', 'Exclusion Module',
+ compute='_compute_exclusion', search='_search_exclusion')
state = fields.Selection(DEP_STATES, string='Status', compute='_compute_state')
@api.depends('name')
@@ -968,6 +976,12 @@ class ModuleExclusion(models.Model):
for excl in self:
excl.exclusion_id = name_mod.get(excl.name)
+ def _search_exclusion(self, operator, value):
+ assert operator == 'in'
+ modules = self.env['ir.module.module'].browse(set(value))
+ return [('name', 'in', modules.mapped('name'))]
+
+ @api.depends('exclusion_id.state')
def _compute_state(self):
for exclusion in self:
exclusion.state = exclusion.exclusion_id.state or 'unknown'