diff --git a/bin/addons/base/ir/ir_actions.py b/bin/addons/base/ir/ir_actions.py index df7edd1858f..1299bff09cf 100644 --- a/bin/addons/base/ir/ir_actions.py +++ b/bin/addons/base/ir/ir_actions.py @@ -120,6 +120,7 @@ class act_window(osv.osv): 'domain': fields.char('Domain Value', size=250), 'context': fields.char('Context Value', size=250), 'res_model': fields.char('Model', size=64), + 'src_model': fields.char('Source model', size=64), 'view_type': fields.selection((('tree','Tree'),('form','Form')),string='Type of view'), 'view_mode': fields.char('Mode of view', size=250), 'usage': fields.char('Action Usage', size=32), diff --git a/bin/addons/base/res/partner/crm_view.xml b/bin/addons/base/res/partner/crm_view.xml index f9a9155d9e9..2717a35c595 100644 --- a/bin/addons/base/res/partner/crm_view.xml +++ b/bin/addons/base/res/partner/crm_view.xml @@ -14,7 +14,6 @@ - res.partner.canal.form res.partner.canal form tree,form @@ -34,7 +33,6 @@ - res.partner.event.type.form res.partner.event.type form tree,form @@ -65,7 +63,6 @@ - res.partner.som.form res.partner.som form tree,form diff --git a/bin/addons/base/res/partner/partner.py b/bin/addons/base/res/partner/partner.py index c93353a162a..82cc3507024 100644 --- a/bin/addons/base/res/partner/partner.py +++ b/bin/addons/base/res/partner/partner.py @@ -351,7 +351,7 @@ class res_partner_address(osv.osv): _columns = { 'partner_id': fields.many2one('res.partner', 'Partner', required=True, ondelete='cascade', select=True), 'type': fields.selection( [ ('default','Default'),('invoice','Invoice'), ('delivery','Delivery'), ('contact','Contact'), ('other','Other') ],'Address Type'), - 'function': fields.many2one('res.partner.function', 'Function', relate=True), + 'function': fields.many2one('res.partner.function', 'Function'), 'title': fields.selection(_contact_title_get, 'Title', size=32), 'name': fields.char('Contact Name', size=64), 'street': fields.char('Street', size=128), diff --git a/bin/osv/fields.py b/bin/osv/fields.py index 3032bf79d13..191be60e5b0 100644 --- a/bin/osv/fields.py +++ b/bin/osv/fields.py @@ -86,6 +86,9 @@ class _column(object): for a in args: if args[a]: setattr(self, a, args[a]) + if self.relate: + warnings.warn("The relate attribute doesn't work anymore, use act_window tag instead", DeprecationWarning) + def set(self, cr, obj, id, name, value, user=None, context={}): cr.execute('update '+obj._table+' set '+name+'='+self._symbol_set[0]+' where id=%d', (self._symbol_set[1](value),id) ) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 9ace20f7b9a..2abca003639 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1309,20 +1309,14 @@ class orm(object): if toolbar: resprint = self.pool.get('ir.values').get(cr, user, 'action', 'client_print_multi', [(self._name, False)], False, context) resaction = self.pool.get('ir.values').get(cr, user, 'action', 'client_action_multi', [(self._name, False)], False, context) + resrelate = self.pool.get('ir.values').get(cr, user, 'action', 'client_action_relate', [(self._name, False)], False, context) resprint = map(lambda x:x[2], resprint) resaction = map(lambda x:x[2], resaction) resaction = filter(lambda x: not x.get('multi',False), resaction) - for x in resprint+resaction: + resrelate = map(lambda x:x[2], resrelate) + for x in resprint+resaction+resrelate: x['string'] = x['name'] - ids = self.pool.get('ir.model.fields').search(cr, user, [('relation','=',self._name),('relate','=',1)]) - resrelate = self.pool.get('ir.model.fields').read(cr, user, ids, ['name','model_id'], context) - models = self.pool.get('ir.model').read(cr, user, map(lambda x: x['model_id'][0], resrelate), ['name'], context) - dmodels = {} - for m in models: - dmodels[m['id']] = m['name'] - for x in resrelate: - x['string'] = dmodels[x['model_id'][0]] - + result['toolbar'] = { 'print': resprint, 'action': resaction, diff --git a/bin/tools/convert.py b/bin/tools/convert.py index 179c73d6475..0b6e08b4f73 100644 --- a/bin/tools/convert.py +++ b/bin/tools/convert.py @@ -178,6 +178,34 @@ class xml_import(object): self.pool.get('ir.model.data').ir_set(cr, self.uid, 'action', keyword, string, [model], value, replace=replace, isobject=True) return False + def _tag_act_window(self, cr, rec, data_node=None): + name = rec.hasAttribute('name') and rec.getAttribute('name').encode('utf-8') + xml_id = rec.getAttribute('id').encode('utf8') + type = rec.hasAttribute('type') and rec.getAttribute('type').encode('utf-8') or 'ir.actions.act_window' + view_id = False + if rec.hasAttribute('view'): + view_id = self.id_get(cr, 'ir.actions.act_window', rec.getAttribute('view').encode('utf-8')) + domain = rec.hasAttribute('domain') and rec.getAttribute('domain').encode('utf-8') + context = rec.hasAttribute('context') and rec.getAttribute('context').encode('utf-8') or '{}' + res_model = rec.getAttribute('res_model').encode('utf-8') + src_model = rec.hasAttribute('src_model') and rec.getAttribute('src_model').encode('utf-8') + view_type = rec.hasAttribute('view_type') and rec.getAttribute('view_type').encode('utf-8') or 'form' + view_mode = rec.hasAttribute('view_mode') and rec.getAttribute('view_mode').encode('utf-8') or 'tree,form' + usage = rec.hasAttribute('usage') and rec.getAttribute('usage').encode('utf-8') + + res = {'name': name, 'type': type, 'view_id': view_id, 'domain': domain, 'context': context, 'res_model': res_model, 'src_model': src_model, 'view_type': view_type, 'view_mode': view_mode, 'usage': usage } + + id = self.pool.get('ir.model.data')._update(cr, self.uid, 'ir.actions.act_window', self.module, res, xml_id, mode=self.mode) + self.idref[xml_id] = id + + if src_model: + keyword = 'client_action_relate' + keys = [('action', keyword), ('res_model', res_model)] + value = 'ir.actions.act_window,'+str(id) + replace = rec.hasAttribute('replace') and rec.getAttribute('replace') + self.pool.get('ir.model.data').ir_set(cr, self.uid, 'action', keyword, xml_id, [src_model], value, replace=replace, isobject=True) + return False + def _tag_ir_set(self, cr, rec, data_node=None): if not self.mode=='init': return False @@ -386,6 +414,7 @@ class xml_import(object): 'ir_set': self._tag_ir_set, 'function': self._tag_function, 'workflow': self._tag_workflow, + 'act_window': self._tag_act_window, } #