summaryrefslogtreecommitdiff
path: root/bin/addons/base/module/module.py
diff options
context:
space:
mode:
Diffstat (limited to 'bin/addons/base/module/module.py')
-rw-r--r--bin/addons/base/module/module.py52
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"