diff --git a/bin/addons/base/__openerp__.py b/bin/addons/base/__openerp__.py index bb419fc90d3..e15dabc42e7 100644 --- a/bin/addons/base/__openerp__.py +++ b/bin/addons/base/__openerp__.py @@ -43,6 +43,7 @@ 'ir/wizard/wizard_menu_view.xml', 'ir/ir.xml', 'ir/workflow/workflow_view.xml', + 'ir/report/ir_report.xml', 'module/module_view.xml', 'module/module_data.xml', 'module/module_report.xml', diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml index 29a836892b5..e944747cfd3 100644 --- a/bin/addons/base/ir/ir.xml +++ b/bin/addons/base/ir/ir.xml @@ -967,6 +967,7 @@ + @@ -981,29 +982,26 @@
- - - - + + + + - - - - + @@ -1032,6 +1030,9 @@ + + + @@ -1094,7 +1095,7 @@ - + @@ -1113,6 +1114,7 @@ + diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py index 4dfe39a7762..ed43ce824a3 100644 --- a/bin/addons/base/ir/ir_model.py +++ b/bin/addons/base/ir/ir_model.py @@ -63,6 +63,18 @@ class ir_model(osv.osv): is_osv_mem = self._is_osv_memory(cr, uid, all_model_ids, 'osv_memory', arg=None, context=context) return [('id', 'in', [id for id in is_osv_mem if bool(is_osv_mem[id]) == value])] + def _in_modules(self, cr, uid, ids, field_name, arg, context=None): + res = osv.osv.get_xml_ids(self, cr, uid, ids) + for k,v in res.iteritems(): + res[k]=', '.join(map(lambda x: x.split('.')[0],v)) + return res + + def _view_ids(self, cr, uid, ids, field_name, arg, context=None): + models=self.browse(cr,uid,ids) + res={} + for model in models: + res[model.id]=self.pool.get("ir.ui.view").search(cr, uid, [('model', '=', model.name)]) + return res _columns = { 'name': fields.char('Object Name', size=64, translate=True, required=True), @@ -73,7 +85,9 @@ class ir_model(osv.osv): 'access_ids': fields.one2many('ir.model.access', 'model_id', 'Access'), 'osv_memory': fields.function(_is_osv_memory, method=True, string='In-memory model', type='boolean', fnct_search=_search_osv_memory, - help="Indicates whether this object model lives in memory only, i.e. is not persisted (osv.osv_memory)") + help="Indicates whether this object model lives in memory only, i.e. is not persisted (osv.osv_memory)"), + 'modules': fields.function(_in_modules, method=True, type='char', size=128, string='In modules', help='List of modules in which the object is defined'), + 'view_ids': fields.function(_view_ids, method=True, type='one2many', obj='ir.ui.view', string='Views'), } _defaults = { @@ -150,6 +164,13 @@ ir_model() class ir_model_fields(osv.osv): _name = 'ir.model.fields' _description = "Fields" + + def _in_modules(self, cr, uid, ids, field_name, arg, context=None): + res = osv.osv.get_xml_ids(self, cr, uid, ids) + for k,v in res.iteritems(): + res[k]=', '.join(map(lambda x: x.split('.')[0],v)) + return res + _columns = { 'name': fields.char('Name', required=True, size=64, select=1), 'model': fields.char('Object Name', size=64, required=True, select=1), @@ -170,6 +191,7 @@ class ir_model_fields(osv.osv): 'groups': fields.many2many('res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id', 'Groups'), 'view_load': fields.boolean('View Auto-Load'), 'selectable': fields.boolean('Selectable'), + 'modules': fields.function(_in_modules, method=True, type='char', size=128, string='In modules', help='List of modules in which the field is defined'), } _rec_name='field_description' _defaults = { diff --git a/bin/addons/base/ir/report/ir_report.xml b/bin/addons/base/ir/report/ir_report.xml new file mode 100644 index 00000000000..3d077f453c8 --- /dev/null +++ b/bin/addons/base/ir/report/ir_report.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/bin/addons/base/ir/report/modeloverview.sxw b/bin/addons/base/ir/report/modeloverview.sxw new file mode 100644 index 00000000000..ea0f4ce0dfa Binary files /dev/null and b/bin/addons/base/ir/report/modeloverview.sxw differ