[ADD] processing of context['set_editable'] on list view

bzr revid: xmo@openerp.com-20110411111451-5j6ve9f1wjiuzjfx
This commit is contained in:
Xavier Morel 2011-04-11 13:14:51 +02:00
parent 3412b89d95
commit 911369822a
3 changed files with 86 additions and 1 deletions

View File

@ -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"

View File

@ -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 () {

View File

@ -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')