[ADD] processing of context['set_editable'] on list view
bzr revid: xmo@openerp.com-20110411111451-5j6ve9f1wjiuzjfx
This commit is contained in:
parent
3412b89d95
commit
911369822a
|
@ -1,5 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import glob, os
|
||||
import pprint
|
||||
from xml.etree import ElementTree
|
||||
from cStringIO import StringIO
|
||||
|
||||
|
@ -522,6 +523,54 @@ class ListView(View):
|
|||
fields_view = self.fields_view_get(req, model, view_id, 'tree', toolbar=toolbar)
|
||||
return {'fields_view': fields_view}
|
||||
|
||||
def fields_view_get(self, request, model, view_id, view_type="tree",
|
||||
transform=True, toolbar=False, submenu=False):
|
||||
""" Sets @editable on the view's arch if it isn't already set and
|
||||
``set_editable`` is present in the request context
|
||||
"""
|
||||
view = super(ListView, self).fields_view_get(
|
||||
request, model, view_id, view_type, transform, toolbar, submenu)
|
||||
|
||||
view_attributes = view['arch']['attrs']
|
||||
if request.context.get('set_editable')\
|
||||
and 'editable' not in view_attributes:
|
||||
view_attributes['editable'] = 'bottom'
|
||||
return view
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def fill(self, request, model, id, domain,
|
||||
offset=0, limit=False):
|
||||
return self.do_fill(request, model, id, domain, offset, limit)
|
||||
|
||||
def do_fill(self, request, model, id, domain,
|
||||
offset=0, limit=False):
|
||||
""" Returns all information needed to fill a table:
|
||||
|
||||
* view with processed ``editable`` flag
|
||||
* fields (columns) with processed ``invisible`` flag
|
||||
* rows with processed ``attrs`` and ``colors``
|
||||
|
||||
.. note:: context is passed through ``request`` parameter
|
||||
|
||||
:param request: OpenERP request
|
||||
:type request: openerpweb.openerpweb.JsonRequest
|
||||
:type str model: OpenERP model for this list view
|
||||
:type int id: view_id, or False if none provided
|
||||
:param list domain: the search domain to search for
|
||||
:param int offset: search offset, for pagination
|
||||
:param int limit: search limit, for pagination
|
||||
:returns: hell if I have any idea yet
|
||||
"""
|
||||
view = self.fields_view_get(request, model, id)
|
||||
|
||||
rows = DataSet().do_search_read(request, model,
|
||||
offset=offset, limit=limit,
|
||||
domain=domain)
|
||||
# rows pipe
|
||||
# process_attrs
|
||||
# process_colors
|
||||
return rows
|
||||
|
||||
class SearchView(View):
|
||||
_cp_path = "/base/searchview"
|
||||
|
||||
|
|
|
@ -160,7 +160,16 @@ openerp.base.ListView = openerp.base.Controller.extend(
|
|||
// TODO: handle non-empty results.group_by with read_group
|
||||
self.dataset.context = results.context;
|
||||
self.dataset.domain = results.domain;
|
||||
self.dataset.read_slice(self.dataset.fields, 0, self.limit, self.do_fill_table);
|
||||
// TODO: need to do 5 billion tons of pre-processing, bypass
|
||||
// DataSet for now
|
||||
//self.dataset.read_slice(self.dataset.fields, 0, self.limit,
|
||||
// self.do_fill_table);
|
||||
self.rpc('/base/listview/fill', {
|
||||
'model': self.dataset.model,
|
||||
'id': self.view_id,
|
||||
'context': results.context,
|
||||
'domain': results.domain
|
||||
}, self.do_fill_table);
|
||||
});
|
||||
},
|
||||
do_update: function () {
|
||||
|
|
|
@ -178,3 +178,30 @@ class AttrsNormalizationTest(unittest2.TestCase):
|
|||
field_attrs(parsed_view, 'date_deadline')['invisible'])
|
||||
self.assertTrue(field_attrs(parsed_view, 'type_id')['invisible'])
|
||||
|
||||
class ListViewTest(unittest2.TestCase):
|
||||
def setUp(self):
|
||||
self.view = base.controllers.main.ListView()
|
||||
self.request = mock.Mock()
|
||||
self.request.context = {'set_editable': True}
|
||||
def test_no_editable_editable_context(self):
|
||||
self.request.session.model('fake').fields_view_get.return_value = \
|
||||
{'arch': '<tree><field name="foo"/></tree>'}
|
||||
view = self.view.fields_view_get(self.request, 'fake', False)
|
||||
|
||||
self.assertEqual(view['arch']['attrs']['editable'],
|
||||
'bottom')
|
||||
def test_editable_top_editable_context(self):
|
||||
self.request.session.model('fake').fields_view_get.return_value = \
|
||||
{'arch': '<tree editable="top"><field name="foo"/></tree>'}
|
||||
view = self.view.fields_view_get(self.request, 'fake', False)
|
||||
|
||||
self.assertEqual(view['arch']['attrs']['editable'],
|
||||
'top')
|
||||
|
||||
def test_editable_bottom_editable_context(self):
|
||||
self.request.session.model('fake').fields_view_get.return_value = \
|
||||
{'arch': '<tree editable="bottom"><field name="foo"/></tree>'}
|
||||
view = self.view.fields_view_get(self.request, 'fake', False)
|
||||
|
||||
self.assertEqual(view['arch']['attrs']['editable'],
|
||||
'bottom')
|
||||
|
|
Loading…
Reference in New Issue