From 55284034dabcd65bd0740da176840a0e952c6f57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 10 Sep 2026 14:14:16 +0200 Subject: [PATCH] Sort invoices and shipments on Function fields of sale and purchase Closes #15083 (grafted from 9385c3660f174830a30529078f3e2899a7a8672c) --HG-- branch : 8.0 --- modules/purchase/purchase.py | 19 +++++++++++++------ modules/sale/sale.py | 19 +++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/modules/purchase/purchase.py b/modules/purchase/purchase.py index 0c073abd0c..9297b33c03 100644 --- a/modules/purchase/purchase.py +++ b/modules/purchase/purchase.py @@ -17,7 +17,7 @@ from trytond.ir.attachment import AttachmentCopyMixin 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 samesign(a, b): 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 @@ -587,12 +590,16 @@ class Purchase( 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 --git a/modules/sale/sale.py b/modules/sale/sale.py index e9b19eeaf4..9ce1bd952b 100644 --- a/modules/sale/sale.py +++ b/modules/sale/sale.py @@ -17,7 +17,7 @@ from trytond.ir.attachment import AttachmentCopyMixin 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 samesign(a, b): 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 @@ -704,12 +707,16 @@ class Sale( 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):