diff options
| author | Raphael Collet <rco@odoo.com> | 2019-08-23 11:32:22 +0000 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2019-08-26 14:14:55 +0000 |
| commit | 6f1dde1c38a21bdc717e78cab629bc2c12a034d9 (patch) | |
| tree | 60e3a2553eec9f44d448c043dd85bf62f936cb3b | |
| parent | e5c6904a4002b48a7194f692d8aa3988fb3301a6 (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.
| -rw-r--r-- | odoo/addons/base/models/ir_module.py | 20 |
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' |
