details:   https://code.tryton.org/tryton/commit/316795b10472
branch:    7.8
user:      Cédric Krier <[email protected]>
date:      Thu Sep 10 14:14:16 2026 +0200
description:
        Sort invoices and shipments on Function fields of sale and purchase

        Closes #15083
        (grafted from 9385c3660f174830a30529078f3e2899a7a8672c)
diffstat:

 modules/purchase/purchase.py |  19 +++++++++++++------
 modules/sale/sale.py         |  19 +++++++++++++------
 2 files changed, 26 insertions(+), 12 deletions(-)

diffs (102 lines):

diff -r 4e1d14676c85 -r 316795b10472 modules/purchase/purchase.py
--- a/modules/purchase/purchase.py      Thu Sep 10 16:07:26 2026 +0200
+++ b/modules/purchase/purchase.py      Thu Sep 10 14:14:16 2026 +0200
@@ -17,7 +17,7 @@
 from trytond.ir.note import NoteCopyMixin
 from trytond.model import (
     ChatMixin, Index, ModelSQL, ModelView, Unique, Workflow, fields,
-    sequence_ordered)
+    sequence_ordered, sort)
 from trytond.model.exceptions import AccessError
 from trytond.modules.account.tax import TaxableMixin
 from trytond.modules.account_product.exceptions import AccountError
@@ -44,13 +44,16 @@
 def get_shipments_returns(model_name):
     "Computes the returns or shipments"
     def method(self, name):
-        Model = Pool().get(model_name)
+        pool = Pool()
+        Model = pool.get(model_name)
+        field = getattr(self.__class__, name)
+        order = field.order if field.order is not None else Model._order
         shipments = set()
         for line in self.line_lines:
             for move in line.moves:
                 if isinstance(move.shipment, Model):
-                    shipments.add(move.shipment.id)
-        return list(shipments)
+                    shipments.add(move.shipment)
+        return sort(shipments, order)
     return method
 
 
@@ -578,12 +581,16 @@
         return result
 
     def get_invoices(self, name):
+        pool = Pool()
+        Invoice = pool.get('account.invoice')
+        field = getattr(self.__class__, name)
+        order = field.order if field.order is not None else Invoice._order
         invoices = set()
         for line in self.line_lines:
             for invoice_line in line.invoice_lines:
                 if invoice_line.invoice:
-                    invoices.add(invoice_line.invoice.id)
-        return list(invoices)
+                    invoices.add(invoice_line.invoice)
+        return sort(invoices, order)
 
     @classmethod
     def search_invoices(cls, name, clause):
diff -r 4e1d14676c85 -r 316795b10472 modules/sale/sale.py
--- a/modules/sale/sale.py      Thu Sep 10 16:07:26 2026 +0200
+++ b/modules/sale/sale.py      Thu Sep 10 14:14:16 2026 +0200
@@ -17,7 +17,7 @@
 from trytond.ir.note import NoteCopyMixin
 from trytond.model import (
     ChatMixin, Index, ModelSQL, ModelView, Unique, Workflow, fields,
-    sequence_ordered)
+    sequence_ordered, sort)
 from trytond.model.exceptions import AccessError
 from trytond.modules.account.tax import TaxableMixin
 from trytond.modules.account_product.exceptions import AccountError
@@ -45,13 +45,16 @@
 def get_shipments_returns(model_name):
     "Computes the returns or shipments"
     def method(self, name):
-        Model = Pool().get(model_name)
+        pool = Pool()
+        Model = pool.get(model_name)
+        field = getattr(self.__class__, name)
+        order = field.order if field.order is not None else Model._order
         shipments = set()
         for line in self.line_lines:
             for move in line.moves:
                 if isinstance(move.shipment, Model):
-                    shipments.add(move.shipment.id)
-        return list(shipments)
+                    shipments.add(move.shipment)
+        return sort(shipments, order)
     return method
 
 
@@ -694,12 +697,16 @@
         return result
 
     def get_invoices(self, name):
+        pool = Pool()
+        Invoice = pool.get('account.invoice')
+        field = getattr(self.__class__, name)
+        order = field.order if field.order is not None else Invoice._order
         invoices = set()
         for line in self.line_lines:
             for invoice_line in line.invoice_lines:
                 if invoice_line.invoice:
-                    invoices.add(invoice_line.invoice.id)
-        return list(invoices)
+                    invoices.add(invoice_line.invoice)
+        return sort(invoices, order)
 
     @classmethod
     def search_invoices(cls, name, clause):

Reply via email to