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