[ADD] model-less fields & views munging thing
bzr revid: xmo@openerp.com-20130425093739-v0kya956yzcy5wp3
This commit is contained in:
parent
4923d1b82d
commit
e30b6edb41
|
@ -560,7 +560,7 @@ class view(osv.osv):
|
||||||
children = True
|
children = True
|
||||||
|
|
||||||
modifiers = {}
|
modifiers = {}
|
||||||
Model = self.pool[model]
|
Model = self.pool.get(model)
|
||||||
|
|
||||||
def encode(s):
|
def encode(s):
|
||||||
if isinstance(s, unicode):
|
if isinstance(s, unicode):
|
||||||
|
@ -577,19 +577,17 @@ class view(osv.osv):
|
||||||
|
|
||||||
:return: True if field should be included in the result of fields_view_get
|
:return: True if field should be included in the result of fields_view_get
|
||||||
"""
|
"""
|
||||||
if node.tag == 'field' and node.get('name') in Model._all_columns:
|
if Model and node.tag == 'field' and node.get('name') in Model._all_columns:
|
||||||
column = Model._all_columns[node.get('name')].column
|
column = Model._all_columns[node.get('name')].column
|
||||||
if column.groups and not self.user_has_groups(cr, user,
|
if column.groups and not self.user_has_groups(
|
||||||
groups=column.groups,
|
cr, user, groups=column.groups, context=context):
|
||||||
context=context):
|
|
||||||
node.getparent().remove(node)
|
node.getparent().remove(node)
|
||||||
fields.pop(node.get('name'), None)
|
fields.pop(node.get('name'), None)
|
||||||
# no point processing view-level ``groups`` anymore, return
|
# no point processing view-level ``groups`` anymore, return
|
||||||
return False
|
return False
|
||||||
if node.get('groups'):
|
if node.get('groups'):
|
||||||
can_see = self.user_has_groups(cr, user,
|
can_see = self.user_has_groups(
|
||||||
groups=node.get('groups'),
|
cr, user, groups=node.get('groups'), context=context)
|
||||||
context=context)
|
|
||||||
if not can_see:
|
if not can_see:
|
||||||
node.set('invisible', '1')
|
node.set('invisible', '1')
|
||||||
modifiers['invisible'] = True
|
modifiers['invisible'] = True
|
||||||
|
@ -728,7 +726,7 @@ class view(osv.osv):
|
||||||
|
|
||||||
def _disable_workflow_buttons(self, cr, user, model, node):
|
def _disable_workflow_buttons(self, cr, user, model, node):
|
||||||
""" Set the buttons in node to readonly if the user can't activate them. """
|
""" Set the buttons in node to readonly if the user can't activate them. """
|
||||||
if user == 1:
|
if model is None or user == 1:
|
||||||
# admin user can always activate workflow buttons
|
# admin user can always activate workflow buttons
|
||||||
return node
|
return node
|
||||||
|
|
||||||
|
@ -763,7 +761,8 @@ class view(osv.osv):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
fields = {}
|
fields = {}
|
||||||
Model = self.pool[model]
|
Model = self.pool.get(model)
|
||||||
|
|
||||||
if node.tag == 'diagram':
|
if node.tag == 'diagram':
|
||||||
if node.getchildren()[0].tag == 'node':
|
if node.getchildren()[0].tag == 'node':
|
||||||
node_model = self.pool[node.getchildren()[0].get('object')]
|
node_model = self.pool[node.getchildren()[0].get('object')]
|
||||||
|
@ -774,8 +773,9 @@ class view(osv.osv):
|
||||||
if node.getchildren()[1].tag == 'arrow':
|
if node.getchildren()[1].tag == 'arrow':
|
||||||
arrow_fields = self.pool[node.getchildren()[1].get('object')].fields_get(cr, user, None, context)
|
arrow_fields = self.pool[node.getchildren()[1].get('object')].fields_get(cr, user, None, context)
|
||||||
fields.update(arrow_fields)
|
fields.update(arrow_fields)
|
||||||
else:
|
elif Model:
|
||||||
fields = Model.fields_get(cr, user, None, context)
|
fields = Model.fields_get(cr, user, None, context)
|
||||||
|
|
||||||
fields_def = self.__view_look_dom(cr, user, model, node, view_id, False, fields, context=context)
|
fields_def = self.__view_look_dom(cr, user, model, node, view_id, False, fields, context=context)
|
||||||
node = self._disable_workflow_buttons(cr, user, model, node)
|
node = self._disable_workflow_buttons(cr, user, model, node)
|
||||||
if node.tag in ('kanban', 'tree', 'form', 'gantt'):
|
if node.tag in ('kanban', 'tree', 'form', 'gantt'):
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
# -*- encoding: utf-8 -*-
|
||||||
from lxml import etree as ET
|
from lxml import etree as ET
|
||||||
from lxml.builder import E
|
from lxml.builder import E, ElementMaker
|
||||||
|
|
||||||
from openerp.tests import common
|
from openerp.tests import common
|
||||||
import unittest2
|
import unittest2
|
||||||
|
@ -220,3 +221,72 @@ class TestViewCombined(common.TransactionCase):
|
||||||
* defaults mapping
|
* defaults mapping
|
||||||
* ?
|
* ?
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
class TestNoModel(common.TransactionCase):
|
||||||
|
def test_create_view_nomodel(self):
|
||||||
|
View = self.registry('ir.ui.view')
|
||||||
|
view_id = View.create(self.cr, self.uid, {
|
||||||
|
'name': 'dummy',
|
||||||
|
'arch': '<form/>',
|
||||||
|
'inherit_id': False
|
||||||
|
})
|
||||||
|
[view] = View.read(self.cr, self.uid, [view_id])
|
||||||
|
self.assertEqual(view, {
|
||||||
|
'id': view_id,
|
||||||
|
'name': 'dummy',
|
||||||
|
'arch': '<form/>',
|
||||||
|
'type': 'form',
|
||||||
|
'priority': 16,
|
||||||
|
'inherit_id': False,
|
||||||
|
'field_parent': False,
|
||||||
|
'groups_id': [],
|
||||||
|
'xml_id': '',
|
||||||
|
'model_ids': [],
|
||||||
|
'model': '',
|
||||||
|
})
|
||||||
|
|
||||||
|
arch = E.body(
|
||||||
|
E.div(
|
||||||
|
E.h1("Title"),
|
||||||
|
id="header"),
|
||||||
|
E.p("Welcome!"),
|
||||||
|
E.div(
|
||||||
|
E.hr(),
|
||||||
|
E.p("Copyright copyrighter", {'class': 'legalese'}),
|
||||||
|
id="footer"),
|
||||||
|
{'class': "index"},)
|
||||||
|
def test_fields_mess(self):
|
||||||
|
"""
|
||||||
|
Try to call __view_look_dom_arch without a model provided, will need
|
||||||
|
to be altered once it's broken up into sane components
|
||||||
|
"""
|
||||||
|
View = self.registry('ir.ui.view')
|
||||||
|
|
||||||
|
sarch, fields = View._view__view_look_dom_arch(
|
||||||
|
self.cr, self.uid, None, self.arch, None)
|
||||||
|
|
||||||
|
self.assertEqual(sarch, ET.tostring(self.arch, encoding='utf-8'))
|
||||||
|
self.assertEqual(fields, {})
|
||||||
|
|
||||||
|
def test_mess_translation(self):
|
||||||
|
"""
|
||||||
|
Test if translations work correctly without a model
|
||||||
|
"""
|
||||||
|
View = self.registry('ir.ui.view')
|
||||||
|
self.registry('res.lang').load_lang(self.cr, self.uid, 'fr_FR')
|
||||||
|
self.registry('ir.translation').create(self.cr, self.uid, {
|
||||||
|
'name': '',
|
||||||
|
'type': 'view',
|
||||||
|
'lang': 'fr_FR',
|
||||||
|
'src': 'Copyright copyrighter',
|
||||||
|
'value': u"Copyrighter, tous droits réservés",
|
||||||
|
})
|
||||||
|
sarch, fields = View._view__view_look_dom_arch(
|
||||||
|
self.cr, self.uid, None,self.arch, None, {'lang': 'fr_FR'})
|
||||||
|
self.assertEqual(
|
||||||
|
sarch,
|
||||||
|
ET.tostring(self.arch, encoding='utf-8')
|
||||||
|
.replace('Copyright copyrighter',
|
||||||
|
'Copyrighter, tous droits réservés'))
|
||||||
|
self.assertEqual(fields, {})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue