Use the summary as the fallback record name for lines without a product

Closes #14198
This commit is contained in:
sbend
2026-09-22 12:35:06 +02:00
parent 5ea8b1f784
commit a160de628a
3 changed files with 50 additions and 21 deletions
+20 -11
View File
@@ -3054,19 +3054,27 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin):
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 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin):
('invoice.rec_name', *clause[1:]),
('product.rec_name', *clause[1:]),
('account.rec_name', *clause[1:]),
('summary', *clause[1:]),
]
@classmethod
+15 -5
View File
@@ -2135,13 +2135,22 @@ class Line(sequence_ordered(), ModelSQL, ModelView):
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 @@ class Line(sequence_ordered(), ModelSQL, ModelView):
return [bool_op,
('purchase.rec_name', *clause[1:]),
('product.rec_name', *clause[1:]),
('summary', *clause[1:]),
]
@classmethod
+15 -5
View File
@@ -2287,13 +2287,22 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView):
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 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView):
return [bool_op,
('sale.rec_name', *clause[1:]),
('product.rec_name', *clause[1:]),
('summary', *clause[1:]),
]
@classmethod