changeset 7df5f88c1e60 in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=7df5f88c1e60
description:
        Update rec_name of tree with on_change

        issue11021
        review403131002
diffstat:

 trytond/model/tree.py      |  10 ++++++++++
 trytond/tests/test_tree.py |  13 +++++++++++++
 2 files changed, 23 insertions(+), 0 deletions(-)

diffs (50 lines):

diff -r 373241e8cc54 -r 7df5f88c1e60 trytond/model/tree.py
--- a/trytond/model/tree.py     Fri Apr 08 09:50:47 2022 +0200
+++ b/trytond/model/tree.py     Fri Apr 08 09:55:23 2022 +0200
@@ -12,6 +12,8 @@
 
 
 def tree(parent='parent', name='name', separator=None):
+    from . import fields
+
     class TreeMixin(object):
         __slots__ = ()
 
@@ -37,6 +39,14 @@
                     record = getattr(record, parent)
                 return separator.join(reversed(names))
 
+            @fields.depends(parent, '_parent_%s.rec_name' % parent, name)
+            def on_change_with_rec_name(self):
+                names = []
+                if self.parent and self.parent.rec_name:
+                    names.append(self.parent.rec_name)
+                names.append(getattr(self, name) or '')
+                return separator.join(names)
+
             @classmethod
             def search_rec_name(cls, _, clause):
                 domain = []
diff -r 373241e8cc54 -r 7df5f88c1e60 trytond/tests/test_tree.py
--- a/trytond/tests/test_tree.py        Fri Apr 08 09:50:47 2022 +0200
+++ b/trytond/tests/test_tree.py        Fri Apr 08 09:55:23 2022 +0200
@@ -202,6 +202,19 @@
         self.assertEqual(record.rec_name, "parent / record")
 
     @with_transaction()
+    def test_on_change_with_rec_name(self):
+        "Test on_change_with_rec_name"
+        pool = Pool()
+        Tree = pool.get('test.tree')
+
+        parent = Tree(name="parent")
+        parent.save()
+        record = Tree(name="record", parent=parent)
+        record.save()
+
+        self.assertEqual(record.rec_name, record.on_change_with_rec_name())
+
+    @with_transaction()
     def test_search_rec_name_equals(self):
         "Test search_rec_name equals"
         pool = Pool()

Reply via email to