details: https://code.tryton.org/tryton/commit/0795dca1e366
branch: default
user: sbend <[email protected]>
date: Tue Sep 22 12:35:06 2026 +0200
description:
Use the summary as the fallback record name for lines without a product
Closes #14198
diffstat:
modules/account_invoice/invoice.py | 31 ++++++++++++++++++++-----------
modules/purchase/purchase.py | 20 +++++++++++++++-----
modules/sale/sale.py | 20 +++++++++++++++-----
3 files changed, 50 insertions(+), 21 deletions(-)
diffs (128 lines):
diff -r d5ea3f916372 -r 0795dca1e366 modules/account_invoice/invoice.py
--- a/modules/account_invoice/invoice.py Mon Sep 21 15:28:29 2026 +0200
+++ b/modules/account_invoice/invoice.py Tue Sep 22 12:35:06 2026 +0200
@@ -3054,19 +3054,27 @@
def get_rec_name(self, name):
pool = Pool()
Lang = pool.get('ir.lang')
- if self.product:
+ name = self.product.rec_name if self.product else self.summary
+ if not name and self.account:
+ name = self.account.rec_name
+
+ if self.type == 'line':
lang = Lang.get()
- prefix = (lang.format_number_symbol(
- self.quantity or 0, self.unit, digits=self.unit.digits)
- + ' %s' % self.product.rec_name)
- elif self.account:
- prefix = self.account.rec_name
- else:
- prefix = '(%s)' % self.id
+ if self.unit:
+ quantity = lang.format_number_symbol(
+ self.quantity or 0, self.unit, digits=self.unit.digits)
+ else:
+ quantity = lang.format_number(self.quantity or 0)
+ if name:
+ name = f'{quantity} {name}'
+ else:
+ name = quantity
+ elif not name:
+ name = f'({self.id})'
+
if self.invoice:
- return '%s @ %s' % (prefix, self.invoice.rec_name)
- else:
- return prefix
+ name = f'{name} @ {self.invoice.rec_name}'
+ return name
@classmethod
def search_rec_name(cls, name, clause):
@@ -3079,6 +3087,7 @@
('invoice.rec_name', *clause[1:]),
('product.rec_name', *clause[1:]),
('account.rec_name', *clause[1:]),
+ ('summary', *clause[1:]),
]
@classmethod
diff -r d5ea3f916372 -r 0795dca1e366 modules/purchase/purchase.py
--- a/modules/purchase/purchase.py Mon Sep 21 15:28:29 2026 +0200
+++ b/modules/purchase/purchase.py Tue Sep 22 12:35:06 2026 +0200
@@ -2135,13 +2135,22 @@
def get_rec_name(self, name):
pool = Pool()
Lang = pool.get('ir.lang')
- if self.product:
+ name = self.product.rec_name if self.product else self.summary
+ if self.type == 'line':
lang = Lang.get()
- return (lang.format_number_symbol(
+ if self.unit:
+ quantity = lang.format_number_symbol(
self.quantity or 0, self.unit, digits=self.unit.digits)
- + ' %s @ %s' % (self.product.rec_name, self.purchase.rec_name))
- else:
- return self.purchase.rec_name
+ else:
+ quantity = lang.format_number(self.quantity or 0)
+ if name:
+ name = f'{quantity} {name}'
+ else:
+ name = quantity
+ elif not name:
+ name = f'({self.id})'
+
+ return f'{name} @ {self.purchase.rec_name}'
@classmethod
def search_rec_name(cls, name, clause):
@@ -2153,6 +2162,7 @@
return [bool_op,
('purchase.rec_name', *clause[1:]),
('product.rec_name', *clause[1:]),
+ ('summary', *clause[1:]),
]
@classmethod
diff -r d5ea3f916372 -r 0795dca1e366 modules/sale/sale.py
--- a/modules/sale/sale.py Mon Sep 21 15:28:29 2026 +0200
+++ b/modules/sale/sale.py Tue Sep 22 12:35:06 2026 +0200
@@ -2287,13 +2287,22 @@
def get_rec_name(self, name):
pool = Pool()
Lang = pool.get('ir.lang')
- if self.product:
+ name = self.product.rec_name if self.product else self.summary
+ if self.type == 'line':
lang = Lang.get()
- return (lang.format_number_symbol(
+ if self.unit:
+ quantity = lang.format_number_symbol(
self.quantity or 0, self.unit, digits=self.unit.digits)
- + ' %s @ %s' % (self.product.rec_name, self.sale.rec_name))
- else:
- return self.sale.rec_name
+ else:
+ quantity = lang.format_number(self.quantity or 0)
+ if name:
+ name = f'{quantity} {name}'
+ else:
+ name = quantity
+ elif not name:
+ name = f'({self.id})'
+
+ return f'{name} @ {self.sale.rec_name}'
@classmethod
def search_rec_name(cls, name, clause):
@@ -2305,6 +2314,7 @@
return [bool_op,
('sale.rec_name', *clause[1:]),
('product.rec_name', *clause[1:]),
+ ('summary', *clause[1:]),
]
@classmethod