From a6d7630bac84ff8d742dd7b567e214c52c61d950 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 27 May 2010 01:04:09 +0200 Subject: [PATCH] [ADD] osv.osv, base: added generic xml_id getter + added xml_id to views on ir.ui.views + minor fine-tuning of admin views bzr revid: odo@openerp.com-20100526230409-s88mp2gma1li8n9t --- bin/addons/base/ir/ir.xml | 27 ++++++++++++++++++--------- bin/addons/base/ir/ir_ui_view.py | 6 ++++-- bin/osv/orm.py | 21 +++++++++++++++++++++ 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml index c1807d29a2c..9f280ed6564 100644 --- a/bin/addons/base/ir/ir.xml +++ b/bin/addons/base/ir/ir.xml @@ -609,13 +609,21 @@ form
- - - - - - - + + + + + + + + + + + + + + + @@ -628,9 +636,10 @@ + - + @@ -961,7 +970,7 @@ - + diff --git a/bin/addons/base/ir/ir_ui_view.py b/bin/addons/base/ir/ir_ui_view.py index a4b6923c672..f1a50143ef3 100644 --- a/bin/addons/base/ir/ir_ui_view.py +++ b/bin/addons/base/ir/ir_ui_view.py @@ -66,10 +66,12 @@ class view(osv.osv): 'arch': fields.text('View Architecture', required=True), 'inherit_id': fields.many2one('ir.ui.view', 'Inherited View', ondelete='cascade'), 'field_parent': fields.char('Child Field',size=64), + 'xml_id': fields.function(osv.osv.get_xml_id, type='char', size=128, string="XML ID", + method=True), } _defaults = { - 'arch': lambda *a: '\n\n\t\n', - 'priority': lambda *a: 16 + 'arch': '\n\n\t\n', + 'priority': 16 } _order = "priority" _constraints = [ diff --git a/bin/osv/orm.py b/bin/osv/orm.py index e3514df8ae0..e9d60d93c84 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -3923,5 +3923,26 @@ class orm(orm_template): return False return True + def get_xml_id(self, cr, uid, ids, *args, **kwargs): + """Find out the XML ID of any database record, if there + is one. This method works as a possible implementation + for a function field, to be able to add it to any + model object easily, referencing it as 'osv.osv.get_xml_id'. + + get_xml_id(cr, uid, ids) -> { 'id': 'module.xml_id' } + + :return: the fully qualified XML ID of the given object, + defaulting to an empty string when there's none. + """ + result = dict.fromkeys(ids, '') + model_data_obj = self.pool.get('ir.model.data') + data_ids = model_data_obj.search(cr,uid, + [('model','=',self._name),('res_id','in',ids)]) + data_results = model_data_obj.read(cr,uid,data_ids, + ['name','module','res_id']) + for record in data_results: + result[record['res_id']] = '%(module)s.%(name)s' % record + return result + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: