Merge lp:~unifield-team/unifield-web/UF_536 into lp:unifield-web

Proposed by jftempo
Status: Merged
Merged at revision: 4599
Proposed branch: lp:~unifield-team/unifield-web/UF_536
Merge into: lp:unifield-web
Diff against target: 204 lines (+71/-7)
6 files modified
addons/openerp/controllers/tree.py (+20/-3)
addons/openerp/static/javascript/treegrid.js (+2/-2)
addons/openerp/validators.py (+14/-0)
addons/openerp/widgets/form/_form.py (+13/-0)
addons/openerp/widgets/listgrid.py (+13/-0)
addons/openerp/widgets/tree_view.py (+9/-2)
To merge this branch: bzr merge lp:~unifield-team/unifield-web/UF_536
Reviewer Review Type Date Requested Status
UniField Dev Team Pending
Review via email: mp+88218@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'addons/openerp/controllers/tree.py'
2--- addons/openerp/controllers/tree.py 2011-05-10 07:16:46 +0000
3+++ addons/openerp/controllers/tree.py 2012-01-11 14:32:41 +0000
4@@ -33,11 +33,13 @@
5 from openobject.tools import url, expose
6
7 from openerp.controllers import SecuredController
8-from openerp.utils import rpc, cache, icons, common, TinyDict
9+from openerp.utils import rpc, cache, icons, common, TinyDict, expr_eval
10 from openerp.widgets import tree_view
11+from babel import numbers
12
13 FORMATTERS = {
14- 'integer': lambda value, _i: str(value),
15+ 'integer': lambda value, _i: '%s' % int(value),
16+ 'integer_finance': lambda value, _i: numbers.format_number(int(value), locale='en_US'),
17 'float': lambda value, _i: '%.02f' % (value),
18 'date': lambda value, _i: time.strftime('%x', time.strptime(value, DT_SERVER_FORMATS['date'])),
19 'datetime': lambda value, _i: time.strftime('%x', time.strptime(value, DT_SERVER_FORMATS['datetime'])),
20@@ -131,7 +133,7 @@
21
22 @expose('json')
23 def data(self, ids, model, fields, field_parent=None, icon_name=None,
24- domain=[], context={}, sort_by=None, sort_order="asc", fields_info=None):
25+ domain=[], context={}, sort_by=None, sort_order="asc", fields_info=None, colors={}):
26
27 if ids == 'None' or ids == '':
28 ids = []
29@@ -150,6 +152,9 @@
30 if isinstance(context, basestring):
31 context = eval(context)
32
33+ if isinstance(colors, basestring):
34+ colors = eval(colors)
35+
36 if isinstance(fields_info, basestring):
37 fields_info = simplejson.loads(fields_info)
38
39@@ -173,9 +178,21 @@
40 fields_info_type = simplejson.loads(fields_info[sort_by])
41 result.sort(lambda a,b: self.sort_callback(a, b, sort_by, sort_order, type=fields_info_type['type']))
42
43+ for item in result:
44+ if colors:
45+ for color, expr in colors.items():
46+ try:
47+ if expr_eval(expr,item or False):
48+ item['color'] = color
49+ break
50+ except:
51+ pass
52+
53 # format the data
54 for field in fields:
55 field_info = simplejson.loads(fields_info[field])
56+ if field_info.get('widget',''):
57+ field_info['type'] = field_info['widget']
58 formatter = FORMATTERS.get(field_info['type'])
59 for x in result:
60 if x[field] and formatter:
61
62=== modified file 'addons/openerp/static/javascript/treegrid.js'
63--- addons/openerp/static/javascript/treegrid.js 2011-03-14 10:25:57 +0000
64+++ addons/openerp/static/javascript/treegrid.js 2012-01-11 14:32:41 +0000
65@@ -326,7 +326,7 @@
66 var key = header.name;
67 var value = this.record.items[key];
68
69- var td = MochiKit.DOM.TD({'class': header.type || null, 'width' : header.width || null});
70+ var td = MochiKit.DOM.TD({'class': header.type || null, 'width' : header.width || null, 'style':{'color':this.record.items['color']}});
71 if (i == 0) { // first column
72
73 var row = [];
74@@ -344,7 +344,7 @@
75
76 row.push(arrow);
77
78- value = MochiKit.DOM.createDOM('A', {'href': '#'}, value);
79+ value = MochiKit.DOM.createDOM('A', {'href': '#','style':{'color':this.record.items['color']}}, value);
80 this.element_a = value;
81
82 this.eventOnKeyDown = MochiKit.Signal.connect(value, 'onkeydown', this, this.onKeyDown);
83
84=== modified file 'addons/openerp/validators.py'
85--- addons/openerp/validators.py 2011-12-29 10:44:43 +0000
86+++ addons/openerp/validators.py 2012-01-11 14:32:41 +0000
87@@ -30,6 +30,7 @@
88
89 from openobject.validators import BaseValidator
90 from openobject.i18n import format
91+from babel import numbers
92
93 class String(BaseValidator):
94 if_empty = False
95@@ -60,6 +61,19 @@
96
97 class Int(formencode.validators.Int):
98 if_empty = False
99+
100+class IntFinance(formencode.validators.Int):
101+ if_empty = False
102+
103+ def _from_python(self, value, state):
104+ return numbers.format_number(int(value) or 0, locale='en_US')
105+
106+ def _to_python(self, value, state):
107+ try:
108+ value = numbers.parse_number(value, locale='en_US')
109+ except ValueError:
110+ raise formencode.api.Invalid(_('Invalid literal for int'), value, state)
111+ return value
112
113 class Float(formencode.validators.Number):
114 if_empty = False
115
116=== modified file 'addons/openerp/widgets/form/_form.py'
117--- addons/openerp/widgets/form/_form.py 2011-12-29 10:44:43 +0000
118+++ addons/openerp/widgets/form/_form.py 2012-01-11 14:32:41 +0000
119@@ -407,6 +407,19 @@
120
121 register_widget(Integer, ["integer"])
122
123+class IntegerFinance(Integer):
124+ template = "/openerp/widgets/form/templates/integer.mako"
125+
126+ def __init__(self, **attrs):
127+ super(IntegerFinance, self).__init__(**attrs)
128+ self.validator = validators.IntFinance()
129+
130+ def set_value(self, value):
131+ self.default = value or 0
132+
133+register_widget(IntegerFinance, ["integer_finance"])
134+
135+
136 class BooleanLabel(InputWidgetLabel):
137 template = "/openerp/widgets/form/templates/boolean_label.mako"
138 class Boolean(TinyInputWidget):
139
140=== modified file 'addons/openerp/widgets/listgrid.py'
141--- addons/openerp/widgets/listgrid.py 2012-01-06 10:47:56 +0000
142+++ addons/openerp/widgets/listgrid.py 2012-01-11 14:32:41 +0000
143@@ -24,6 +24,7 @@
144 import re
145 from openerp import utils
146 from itertools import chain, count
147+from babel import numbers
148
149 import cherrypy
150 from openerp.utils import rpc, icons, common, expr_eval, node_attributes
151@@ -619,6 +620,17 @@
152 return int(self.value)
153
154 return 0
155+
156+class IntFinance(Char):
157+
158+ def get_text(self):
159+ value = 0
160+ if self.value:
161+ if isinstance(self.value, (unicode, str)):
162+ value = eval(value)
163+ else:
164+ value = self.value
165+ return numbers.format_number(value or 0, locale='en_US')
166
167 class ProgressBar(Char):
168 template = "/openerp/widgets/templates/listgrid/progressbar.mako"
169@@ -754,6 +766,7 @@
170 'float':Float,
171 'float_time':FloatTime,
172 'integer':Int,
173+ 'integer_finance':IntFinance,
174 'boolean' : Boolean,
175 'progressbar' : ProgressBar
176 }
177
178=== modified file 'addons/openerp/widgets/tree_view.py'
179--- addons/openerp/widgets/tree_view.py 2011-04-14 09:43:11 +0000
180+++ addons/openerp/widgets/tree_view.py 2012-01-11 14:32:41 +0000
181@@ -72,7 +72,13 @@
182
183 ids = []
184 id = res_id
185-
186+
187+ colors = {}
188+ for color_spec in attrs.get('colors', '').split(';'):
189+ if color_spec:
190+ colour, test = color_spec.split(':')
191+ colors[colour] = test
192+
193 if self.toolbar:
194 ids = proxy.search(self.domain2, 0, 0, 0, ctx)
195 self.toolbar = proxy.read(ids, ['name', 'icon'], ctx)
196@@ -97,7 +103,8 @@
197 context=self.context,
198 field_parent=self.field_parent,
199 onselection="onSelection",
200- fields_info=fields_info)
201+ fields_info=fields_info,
202+ colors=colors)
203 self.id = id
204 self.ids = ids
205

Subscribers

People subscribed via source and target branches

to all changes: