getattr(self, method)(cr, uid, ids, context)
# module fields: install/uninstall the selected modules
- to_install_ids = []
+ to_install_names = []
to_uninstall_ids = []
+ lm = len('module_')
for name, module in classified['module']:
if config[name]:
- if module.state == 'uninstalled': to_install_ids.append(module.id)
+ if not module or module.state == 'uninstalled':
+ to_install_names.append(name[lm:])
else:
- if module.state in ('installed','upgrade'): to_uninstall_ids.append(module.id)
-
- if to_install_ids or to_uninstall_ids:
- ir_module.button_uninstall(cr, uid, to_uninstall_ids, context=context)
- ir_module.button_immediate_install(cr, uid, to_install_ids, context=context)
+ if module and module.state in ('installed', 'to upgrade'):
+ to_uninstall_ids.append(module.id)
+
+ if to_uninstall_ids:
+ ir_module.button_immediate_uninstall(cr, uid, to_uninstall_ids, context=context)
+
+ if to_install_names:
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'apps',
+ 'params': {'modules': to_install_names},
+ }
+ config = self.pool.get('res.config').next(cr, uid, [], context=context) or {}
+ if config.get('type') not in ('ir.actions.act_window_close',):
+ return config
+
# force client-side reload (update user menu and current view)
return {
'type': 'ir.actions.client',