[IMP] Improvement for web addons support (Find web dependencies for particular addons).
bzr revid: noz@tinyerp.com-20100710092619-azl5aqd9ppp4hpdi
This commit is contained in:
parent
dd99061d57
commit
79976ba1e6
|
@ -19,8 +19,8 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import module
|
||||
import module_web
|
||||
import module
|
||||
import wizard
|
||||
import report
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
Loading…
Reference in New Issue