[IMP] Improvement for web addons support (Find web dependencies for particular addons).

bzr revid: noz@tinyerp.com-20100710092619-azl5aqd9ppp4hpdi
This commit is contained in:
noz 2010-07-10 14:56:19 +05:30
parent dd99061d57
commit 79976ba1e6
4 changed files with 63 additions and 7 deletions

View File

@ -19,8 +19,8 @@
#
##############################################################################
import module
import module_web
import module
import wizard
import report

View File

@ -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"

View File

@ -121,6 +121,14 @@
</tree>
</field>
</page>
<page string="Web Dependencies">
<field colspan="4" name="web_dependencies_id" nolabel="1">
<tree string="Dependencies">
<field name="name"/>
<field name="state"/>
</tree>
</field>
</page>
<page string="Features" attrs="{'invisible':[('state','!=','installed')]}">
<separator string="Created Menus" colspan="4"/>
<field colspan="4" name="menus_by_module" nolabel="1"/>

View File

@ -37,14 +37,10 @@ class module_web(osv.osv):
self.create(cr, uid, module)
def button_install(self, cr, uid, ids, context={}):
res = self.write(cr, uid, ids, {'state': 'installed'}, context)
if res:
return "Installed"
return self.write(cr, uid, ids, {'state': 'installed'}, context)
def button_uninstall(self, cr, uid, ids, context={}):
res = self.write(cr, uid, ids, {'state': 'uninstalled'}, context)
if res:
return "Uninstalled"
return self.write(cr, uid, ids, {'state': 'uninstalled'}, context)
module_web()