From c712998f00fa686f09d1d39eeeb9a2683b33e8cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 24 Jan 2023 16:06:27 +0000 Subject: [PATCH] [FIX] mail: be more defensive when previewing fields Sometimes due to new ids / not existing records for previewing crash may happen when rendering the preview of templates. In this commit we rewrite a bit the computation to try to be more resistant. Task-3093257 (Mail: The Composer Update) Part-of: odoo/odoo#107356 --- addons/mail/wizard/mail_template_preview.py | 22 ++++++++------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/addons/mail/wizard/mail_template_preview.py b/addons/mail/wizard/mail_template_preview.py index 6eb21551de0..42f49ff8c84 100644 --- a/addons/mail/wizard/mail_template_preview.py +++ b/addons/mail/wizard/mail_template_preview.py @@ -71,26 +71,20 @@ class MailTemplatePreview(models.TransientModel): """ Preview the mail template (body, subject, ...) depending of the language and the record reference, more precisely the record id for the defined model of the mail template. If no record id is selectable/set, the inline_template placeholders won't be replace in the display information. """ - copy_depends_values = {'lang': self.lang} mail_template = self.mail_template_id.with_context(lang=self.lang) - try: - if not self.resource_ref.id: - self._set_mail_attributes() - else: - copy_depends_values['resource_ref'] = '%s,%s' % (self.resource_ref._name, self.resource_ref.id) + if not self.resource_ref or not self.resource_ref.id: + self._set_mail_attributes() + else: + try: mail_values = mail_template.with_context(template_preview_lang=self.lang)._generate_template( [self.resource_ref.id], self._MAIL_TEMPLATE_FIELDS )[self.resource_ref.id] self._set_mail_attributes(values=mail_values) - self.error_msg = False - except (ValueError, UserError) as user_error: - self._set_mail_attributes() - self.error_msg = user_error.args[0] - finally: - # Avoid to be change by a cache invalidation (in generate_mail), e.g. Quotation / Order report - for key, value in copy_depends_values.items(): - self[key] = value + self.error_msg = False + except (ValueError, UserError) as user_error: + self._set_mail_attributes() + self.error_msg = user_error.args[0] def _set_mail_attributes(self, values=None): for field in self._MAIL_TEMPLATE_FIELDS: