[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
|
||||
|
||||
modifiers = {}
|
||||
Model = self.pool[model]
|
||||
Model = self.pool.get(model)
|
||||
|
||||
def encode(s):
|
||||
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
|
||||
"""
|
||||
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
|
||||
if column.groups and not self.user_has_groups(cr, user,
|
||||
groups=column.groups,
|
||||
context=context):
|
||||
if column.groups and not self.user_has_groups(
|
||||
cr, user, groups=column.groups, context=context):
|
||||
node.getparent().remove(node)
|
||||
fields.pop(node.get('name'), None)
|
||||
# no point processing view-level ``groups`` anymore, return
|
||||
return False
|
||||
if node.get('groups'):
|
||||
can_see = self.user_has_groups(cr, user,
|
||||
groups=node.get('groups'),
|
||||
context=context)
|
||||
can_see = self.user_has_groups(
|
||||
cr, user, groups=node.get('groups'), context=context)
|
||||
if not can_see:
|
||||
node.set('invisible', '1')
|
||||
modifiers['invisible'] = True
|
||||
|
@ -728,7 +726,7 @@ class view(osv.osv):
|
|||
|
||||
def _disable_workflow_buttons(self, cr, user, model, node):
|
||||
""" 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
|
||||
return node
|
||||
|
||||
|
@ -763,7 +761,8 @@ class view(osv.osv):
|
|||
|
||||
"""
|
||||
fields = {}
|
||||
Model = self.pool[model]
|
||||
Model = self.pool.get(model)
|
||||
|
||||
if node.tag == 'diagram':
|
||||
if node.getchildren()[0].tag == 'node':
|
||||
node_model = self.pool[node.getchildren()[0].get('object')]
|
||||
|
@ -774,8 +773,9 @@ class view(osv.osv):
|
|||
if node.getchildren()[1].tag == 'arrow':
|
||||
arrow_fields = self.pool[node.getchildren()[1].get('object')].fields_get(cr, user, None, context)
|
||||
fields.update(arrow_fields)
|
||||
else:
|
||||
elif Model:
|
||||
fields = Model.fields_get(cr, user, None, 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)
|
||||
if node.tag in ('kanban', 'tree', 'form', 'gantt'):
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
from lxml import etree as ET
|
||||
from lxml.builder import E
|
||||
from lxml.builder import E, ElementMaker
|
||||
|
||||
from openerp.tests import common
|
||||
import unittest2
|
||||
|
@ -220,3 +221,72 @@ class TestViewCombined(common.TransactionCase):
|
|||
* 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