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

Reply via email to