Reviewers: ,
Please review this at http://codereview.tryton.org/313001/
Affected files:
M proteus/__init__.py
M proteus/tests/test_model.py
Index: proteus/__init__.py
===================================================================
--- a/proteus/__init__.py
+++ b/proteus/__init__.py
@@ -772,6 +772,9 @@
self._on_change_set(field, value)
for field, value in later.iteritems():
self._on_change_set(field, value)
+ values = {}
+ to_change = set()
+ later = set()
for field, definition in self._fields.iteritems():
if not definition.get('on_change_with'):
continue
@@ -779,11 +782,23 @@
continue
if field == name:
continue
- args = self._on_change_args(definition['on_change_with'])
+ if to_change & set(definition['on_change_with']):
+ later.add(field)
+ to_change.add(field)
+
values.update(self._on_change_args(definition['on_change_with']))
+ if to_change:
context = self._config.context
- res = getattr(self._proxy, 'on_change_with_%s' % field)(args,
+ result =
getattr(self._proxy, 'on_change_with')(list(to_change),
+ values, context)
+ for field, value in result.items():
+ self._on_change_set(field, value)
+ for field in later:
+ definition = self._fields[field]
+ values = self._on_change_args(definition['on_change_with'])
+ context = self._config.context
+ result = getattr(self._proxy, 'on_change_with_%s' %
field)(values,
context)
- self._on_change_set(field, res)
+ self._on_change_set(field, result)
if self._parent:
self._parent._changed.add(self._parent_field_name)
self._parent._on_change(self._parent_field_name)
Index: proteus/tests/test_model.py
===================================================================
--- a/proteus/tests/test_model.py
+++ b/proteus/tests/test_model.py
@@ -289,6 +289,14 @@
trigger.on_create = True
self.assertEqual(trigger.on_time, False)
+ def test_on_change_with(self):
+ Attachment = Model.get('ir.attachment')
+
+ attachment = Attachment()
+
+ attachment.description = 'Test'
+ self.assertEqual(attachment.summary, 'Test')
+
def test_on_change_set(self):
User = Model.get('res.user')
Group = Model.get('res.group')
--
[email protected] mailing list