diff --git a/openerp/addons/__init__.py b/openerp/addons/__init__.py
index af080724136..ee6cd5eba49 100644
--- a/openerp/addons/__init__.py
+++ b/openerp/addons/__init__.py
@@ -843,7 +843,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
if 'base' in tools.config['update'] or 'all' in tools.config['update']:
cr.execute("update ir_module_module set state=%s where name=%s and state=%s", ('to upgrade', 'base', 'installed'))
- # STEP 1: LOAD BASE (must be done before module dependencies can be computed for later steps)
+ # STEP 1: LOAD BASE (must be done before module dependencies can be computed for later steps)
graph = create_graph(cr, ['base'], force)
if not graph:
logger.notifyChannel('init', netsvc.LOG_CRITICAL, 'module base cannot be loaded! (hint: verify addons-path)')
diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py
index 2e276433e63..fd701ba353e 100644
--- a/openerp/addons/base/module/module.py
+++ b/openerp/addons/base/module/module.py
@@ -200,6 +200,7 @@ class module(osv.osv):
def _name_uniq_msg(self, cr, uid, ids, context=None):
return _('The name of the module must be unique !')
+
def _certificate_uniq_msg(self, cr, uid, ids, context=None):
return _('The certificate ID of the module must be unique !')
@@ -285,8 +286,41 @@ class module(osv.osv):
demo = demo or mdemo
return demo
+ def upgrade(self, cr, uid, ids, context=None):
+ mod_obj = self.pool.get('ir.module.module')
+ ids = mod_obj.search(cr, uid, [('state', 'in', ['to upgrade', 'to remove', 'to install'])])
+ unmet_packages = []
+ mod_dep_obj = self.pool.get('ir.module.module.dependency')
+ for mod in mod_obj.browse(cr, uid, ids, context=context):
+ depends_mod_ids = mod_dep_obj.search(cr, uid, [('module_id', '=', mod.id)], context=context)
+ for dep_mod in mod_dep_obj.browse(cr, uid, depends_mod_ids):
+ if dep_mod.state in ('unknown','uninstalled'):
+ unmet_packages.append(dep_mod.name)
+ if len(unmet_packages):
+ raise osv.except_osv(_('Unmet dependency !'), _('Following modules are not installed or unknown: %s') % ('\n\n' + '\n'.join(unmet_packages)))
+ mod_obj.download(cr, uid, ids, context=context)
+ cr.commit()
+ _db, pool = pooler.restart_pool(cr.dbname, update_module=True)
+ return True
+
def button_install(self, cr, uid, ids, context=None):
- return self.state_update(cr, uid, ids, 'to install', ['uninstalled'], context)
+ self.state_update(cr, uid, ids, 'to install', ['uninstalled'], context)
+ self.upgrade(cr, uid, ids, context=context)
+ data_obj = self.pool.get('ir.model.data')
+ id2 = data_obj._get_id(cr, uid, 'base', 'view_base_module_upgrade_install')
+ if id2:
+ id2 = data_obj.browse(cr, uid, id2, context=context).res_id
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.upgrade',
+ 'views': [(id2, 'form')],
+ 'view_id': False,
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'nodestroy':True,
+ }
+
def button_install_cancel(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'uninstalled', 'demo':False})
@@ -305,49 +339,41 @@ class module(osv.osv):
res = cr.fetchall()
if res:
raise orm.except_orm(_('Error'), _('Some installed modules depend on the module you plan to Uninstall :\n %s') % '\n'.join(map(lambda x: '\t%s: %s' % (x[0], x[1]), res)))
+
self.write(cr, uid, ids, {'state': 'to remove'})
+ self.upgrade(cr, uid, ids, context=context)
return True
def button_uninstall_cancel(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'installed'})
return True
+
def button_upgrade(self, cr, uid, ids, context=None):
depobj = self.pool.get('ir.module.module.dependency')
todo = self.browse(cr, uid, ids, context=context)
self.update_list(cr, uid)
-
i = 0
while i
-
+
diff --git a/openerp/addons/base/module/wizard/base_module_upgrade.py b/openerp/addons/base/module/wizard/base_module_upgrade.py
index ca82cfb20d2..e1ba1644387 100644
--- a/openerp/addons/base/module/wizard/base_module_upgrade.py
+++ b/openerp/addons/base/module/wizard/base_module_upgrade.py
@@ -19,7 +19,6 @@
#
##############################################################################
-import pooler
from osv import osv, fields
from tools.translate import _
@@ -81,36 +80,6 @@ class base_module_upgrade(osv.osv_memory):
res = mod_obj.read(cr, uid, ids, ['name','state'], context)
return {'module_info': '\n'.join(map(lambda x: x['name']+' : '+x['state'], res))}
- def upgrade_module(self, cr, uid, ids, context=None):
- mod_obj = self.pool.get('ir.module.module')
- ids = mod_obj.search(cr, uid, [('state', 'in', ['to upgrade', 'to remove', 'to install'])])
- unmet_packages = []
- mod_dep_obj = self.pool.get('ir.module.module.dependency')
- for mod in mod_obj.browse(cr, uid, ids):
- depends_mod_ids = mod_dep_obj.search(cr, uid, [('module_id', '=', mod.id)])
- for dep_mod in mod_dep_obj.browse(cr, uid, depends_mod_ids):
- if dep_mod.state in ('unknown','uninstalled'):
- unmet_packages.append(dep_mod.name)
- if len(unmet_packages):
- raise osv.except_osv(_('Unmet dependency !'), _('Following modules are not installed or unknown: %s') % ('\n\n' + '\n'.join(unmet_packages)))
- mod_obj.download(cr, uid, ids, context=context)
- cr.commit()
- _db, pool = pooler.restart_pool(cr.dbname, update_module=True)
-
- data_obj = pool.get('ir.model.data')
- id2 = data_obj._get_id(cr, uid, 'base', 'view_base_module_upgrade_install')
- if id2:
- id2 = data_obj.browse(cr, uid, id2, context=context).res_id
-
- return {
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'base.module.upgrade',
- 'views': [(id2, 'form')],
- 'view_id': False,
- 'type': 'ir.actions.act_window',
- 'target': 'new',
- }
def config(self, cr, uid, ids, context=None):
return self.pool.get('res.config').next(cr, uid, [], context=context)
diff --git a/openerp/addons/base/module/wizard/base_module_upgrade_view.xml b/openerp/addons/base/module/wizard/base_module_upgrade_view.xml
index b8bb282d6ed..4c15335c28e 100644
--- a/openerp/addons/base/module/wizard/base_module_upgrade_view.xml
+++ b/openerp/addons/base/module/wizard/base_module_upgrade_view.xml
@@ -30,17 +30,13 @@
new
-
+
+
+
+
+
+
-
Module Upgrade Install
diff --git a/openerp/addons/base/res/res_user.py b/openerp/addons/base/res/res_user.py
index 261ec699659..6be35854ff2 100644
--- a/openerp/addons/base/res/res_user.py
+++ b/openerp/addons/base/res/res_user.py
@@ -571,7 +571,6 @@ class groups2(osv.osv): ##FIXME: Is there a reason to inherit this object ?
for record in self.read(cr, uid, ids, ['users'], context=context):
if record['users']:
group_users.extend(record['users'])
-
if group_users:
user_names = [user.name for user in self.pool.get('res.users').browse(cr, uid, group_users, context=context)]
if len(user_names) >= 5: