diff options
Diffstat (limited to 'bin/addons/base/module/module.py')
| -rw-r--r-- | bin/addons/base/module/module.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/bin/addons/base/module/module.py b/bin/addons/base/module/module.py index e760c32430b..46c4e8a75a7 100644 --- a/bin/addons/base/module/module.py +++ b/bin/addons/base/module/module.py @@ -151,6 +151,8 @@ class module(osv.osv): 'url': fields.char('URL', size=128, readonly=True), 'dependencies_id': fields.one2many('ir.module.module.dependency', 'module_id', 'Dependencies', readonly=True), + 'web_dependencies_id': fields.one2many('ir.module.web.dependency', + 'module_id', 'Web Dependencies', readonly=True), 'state': fields.selection([ ('uninstallable','Not Installable'), ('uninstalled','Not Installed'), @@ -242,6 +244,13 @@ class module(osv.osv): else: od = self.browse(cr, uid, ids2)[0] mdemo = od.demo or mdemo + + for web_mod in module.web_dependencies_id: + if web_mod.state == 'unknown': + raise orm.except_orm(_('Error'), _("You try to install the module '%s' that depends on the module:'%s'.\nBut this module is not available in your system.") % (module.name, dep.name,)) + ids2 = self.pool.get('ir.module.web').search(cr, uid, [('module','=',web_mod.name)]) + self.pool.get('ir.module.web').button_install(cr, uid, ids2) + terp = self.get_module_info(module.name) try: self._check_external_dependencies(terp) @@ -364,6 +373,7 @@ class module(osv.osv): id = self.create(cr, uid, dict(name=mod_name, state='uninstalled', **values)) res[1] += 1 self._update_dependencies(cr, uid, id, terp.get('depends', [])) + self._update_web_dependencies(cr, uid, id, terp.get('web_depends', [])) self._update_category(cr, uid, id, terp.get('category', 'Uncategorized')) return res @@ -407,6 +417,15 @@ class module(osv.osv): for d in depends: cr.execute('INSERT INTO ir_module_module_dependency (module_id, name) values (%s, %s)', (id, d)) + def _update_web_dependencies(self, cr, uid, id, depends=[]): + web_module_pool = self.pool.get('ir.module.web') + for d in depends: + ids = web_module_pool.search(cr, uid, [('module','=',d)]) + cr.execute("Select id from ir_module_web_dependency where module_id=%s and web_module_id=%s and name=%s", (id, ids[0], d)) + res = cr.fetchone() + if not res: + cr.execute('INSERT INTO ir_module_web_dependency (module_id, web_module_id, name) values (%s, %s, %s)', (id, ids[0], d)) + def _update_category(self, cr, uid, id, category='Uncategorized'): categs = category.split('/') p_id = None @@ -471,6 +490,39 @@ class module(osv.osv): module() +class web_module_dependency(osv.osv): + _name = "ir.module.web.dependency" + _description = "Web Module dependency" + + def _state(self, cr, uid, ids, name, args, context={}): + result = {} + mod_obj = self.pool.get('ir.module.web') + for md in self.browse(cr, uid, ids): + ids = mod_obj.search(cr, uid, [('module', '=', md.name)]) + if ids: + result[md.id] = mod_obj.read(cr, uid, [ids[0]], ['state'])[0]['state'] + else: + result[md.id] = 'unknown' + return result + + + _columns = { + 'name': fields.char('Name', size=128), + 'module_id': fields.many2one('ir.module.module', 'Module', select=True, ondelete='cascade'), + 'web_module_id': fields.many2one('ir.module.web', 'Web Module', select=True, ondelete='cascade'), + 'state': fields.function(_state, method=True, type='selection', selection=[ + ('uninstallable','Uninstallable'), + ('uninstalled','Not Installed'), + ('installed','Installed'), + ('to upgrade','To be upgraded'), + ('to remove','To be removed'), + ('to install','To be installed'), + ('unknown', 'Unknown'), + ], string='State', readonly=True), + } + +web_module_dependency() + class module_dependency(osv.osv): _name = "ir.module.module.dependency" _description = "Module dependency" |
