From 5fc7311f1a6bea35701d4aa7c2a68ee1f3ad1a2e Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 11 Apr 2011 14:54:50 +0200 Subject: [PATCH] [ADD] row-wise colors bzr revid: xmo@openerp.com-20110411125450-3h0ay8fskd1s6nz5 --- addons/base/controllers/main.py | 34 +++++++++++++++++++++++++---- addons/base/static/src/xml/base.xml | 13 +++++++---- addons/base/test/test_view.py | 33 ++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 8 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 36e9b0feaee..4d75b063a35 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -566,10 +566,36 @@ class ListView(View): rows = DataSet().do_search_read(request, model, offset=offset, limit=limit, domain=domain) - # rows pipe - # process_attrs - # process_colors - return rows + eval_context = request.session.evaluation_context( + request.context) + return [ + {'data': row, + 'attrs': self.process_attrs(view, row, eval_context), + 'color': self.process_colors(view, row, eval_context)} + for row in rows + ] + + def process_attrs(self, view, row, context): + pass + + def process_colors(self, view, row, context): + colors = view['arch']['attrs'].get('colors') + + if not colors: + return None + + color = [ + pair.split(':')[0] + for pair in colors.split(';') + if eval(pair.split(':')[1], dict(context, **row)) + ] + + if not color: + return None + elif len(color) == 1: + return color[0] + return 'maroon' + class SearchView(View): _cp_path = "/base/searchview" diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index caf463cf4e0..8a71b8ebc7a 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -197,9 +197,14 @@ - + + + + + + - + @@ -208,8 +213,8 @@ - - + +