From b67df70b8a6f2ad354525f3f926e65b0be02cc59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Voet=20=28ryv=29?= Date: Fri, 29 Sep 2023 11:21:24 +0200 Subject: [PATCH] [REV] core: remove ORM `display_name` fallback This reverts commit 4573ca0c83eb63785016f4389a5157efb21fa9a4. Because now, `display_name` is implicitly on every form (last breadcrumb item). Then it will be queried by `onchange` calls. When we create a new record, `_rec_name` can be `False` and the display_name will be a technical one: ',' which is uglier than the previous situation showing 'New'. Part-of: odoo/odoo#138061 --- addons/test_mail/tests/test_mail_message.py | 18 ++++++++++++++++++ odoo/addons/base/tests/test_ir_model.py | 8 +------- odoo/models.py | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/addons/test_mail/tests/test_mail_message.py b/addons/test_mail/tests/test_mail_message.py index 37c59f40746..005976f4d74 100644 --- a/addons/test_mail/tests/test_mail_message.py +++ b/addons/test_mail/tests/test_mail_message.py @@ -170,6 +170,24 @@ class TestMessageValues(MailCommon): self.assertEqual(msg.reply_to, formataddr((test_record.name, reply_to_email)), 'Reply-To: use recordname as name in format if recordname + company > 78 chars') + # no record_name: keep company_name in formatting if ok + test_record.write({'name': ''}) + msg = self.env['mail.message'].create({ + 'model': test_record._name, + 'res_id': test_record.id + }) + self.assertEqual(msg.reply_to, formataddr((self.env.user.company_id.name, reply_to_email)), + 'Reply-To: use company as name in format when no record name and still < 78 chars') + + # no record_name and company_name make it blow up: keep only email + self.env.user.company_id.write({'name': 'Super Long Name That People May Enter "Even with an internal quoting of stuff"'}) + msg = self.env['mail.message'].create({ + 'model': test_record._name, + 'res_id': test_record.id + }) + self.assertEqual(msg.reply_to, reply_to_email, + 'Reply-To: use only email when formataddr > 78 chars') + # whatever the record and company names, email is too long: keep only email test_record.write({ 'alias_name': 'Waaaay too long alias name that should make any reply-to blow the 78 characters limit', diff --git a/odoo/addons/base/tests/test_ir_model.py b/odoo/addons/base/tests/test_ir_model.py index 4d1c78506f0..a613ce69fee 100644 --- a/odoo/addons/base/tests/test_ir_model.py +++ b/odoo/addons/base/tests/test_ir_model.py @@ -369,18 +369,12 @@ class TestIrModel(TransactionCase): self.assertEqual(self.registry.field_depends[type(record).display_name], ('x_name',)) self.assertEqual(record.display_name, "Ifan Ben-Mezd") - fallback_display_name = f"x_bananas,{record.id}" - - # When _rec_name value is Falsy, we should fallback correctly. - record.x_name = False - self.assertEqual(record.display_name, fallback_display_name) - # unlinking x_name should fixup _rec_name and display_name self.env['ir.model.fields']._get('x_bananas', 'x_name').unlink() record = self.env['x_bananas'].browse(record.id) self.assertEqual(record._rec_name, None) self.assertEqual(self.registry.field_depends[type(record).display_name], ()) - self.assertEqual(record.display_name, fallback_display_name) + self.assertEqual(record.display_name, f"x_bananas,{record.id}") def test_monetary_currency_field(self): fields_value = [ diff --git a/odoo/models.py b/odoo/models.py index 165551a0ad5..3b444a19b8a 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -1650,7 +1650,7 @@ class BaseModel(metaclass=MetaModel): if self._rec_name: convert = self._fields[self._rec_name].convert_to_display_name for record in self: - record.display_name = convert(record[self._rec_name], record) or f"{record._name},{record.id}" + record.display_name = convert(record[self._rec_name], record) else: for record in self: record.display_name = f"{record._name},{record.id}"