From ad434daf0fad2cbbd2a20b54a0e8840f0b2bf5a3 Mon Sep 17 00:00:00 2001 From: "Nasreddin (bon)" Date: Thu, 1 Apr 2021 15:36:02 +0000 Subject: [PATCH] [FW][FIX] mail: display desired company logo in email + test Steps to reproduce: - Install 'Accounting' module - Switch to "My Company (Chicago)" - Create an invoice - Set Invoice date to 1/1/21 and - Set Due date to 1/3/21 - Add any product and 'Confirm' invoice - Go to customer profile - Click on 'Due' stat button - Click on 'Send by mail' Issue In received email, logo displayed is of "My Company (San Francisco)". Cause Env company not used. Instead, logo of customer.company_id is used if mail type have company_id field, else will fallback on user.company_id Also, if customer.company_id is null, it will fallback on '0': /logo.png?company=%s' % (company.id or 0) Solution If mail record have NOT a company_id field or is not set, set company to self.env.company. Else, set company to record.company_id. opw-2474114 closes odoo/odoo#73099 X-original-commit: 316b5956844d6f77f6fef1efeb5a8a8505e36e8e Signed-off-by: Thibault Delavallee (tde) --- addons/mail/models/mail_thread.py | 7 ++-- addons/test_mail/tests/test_message_post.py | 38 +++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 0b1a9ca5fdf..315b0f0d568 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -2326,9 +2326,10 @@ class MailThread(models.AbstractModel): if add_sign: signature = "

--
%s

" % author.name - # use company switcher company if author is current user - user_company = self.env.company if self.env.user == user else user.company_id - company = self.company_id.sudo() if self and 'company_id' in self else user_company + # company value should fall back on env.company if: + # - no company_id field on record + # - company_id field available but not set + company = self.company_id.sudo() if self and 'company_id' in self and self.company_id else self.env.company if company.website: website_url = 'http://%s' % company.website if not company.website.lower().startswith(('http:', 'https:')) else company.website else: diff --git a/addons/test_mail/tests/test_message_post.py b/addons/test_mail/tests/test_message_post.py index 6ef40ab3c09..9b715b6d2f6 100644 --- a/addons/test_mail/tests/test_message_post.py +++ b/addons/test_mail/tests/test_message_post.py @@ -12,6 +12,7 @@ from odoo.api import call_kw from odoo.exceptions import AccessError from odoo.tests import tagged from odoo.tools import mute_logger, formataddr +from odoo.tests.common import users @tagged('mail_post') @@ -35,6 +36,43 @@ class TestMessagePost(TestMailCommon, TestRecipients): messageId = call_kw(self.env['mail.channel'], 'message_post', [test_channel.id], {'body': 'test'}) self.assertTrue(isinstance(messageId, int)) + @users('employee') + def test_notify_prepare_template_context_company_value(self): + """ Verify that the template context company value is right + after switching the env company or if a company_id is set + on mail record. + """ + current_user = self.env.user + main_company = current_user.company_id + other_company = self.env['res.company'].with_user(self.user_admin).create({'name': 'Company B'}) + current_user.sudo().write({'company_ids': [(4, other_company.id)]}) + test_record = self.env['mail.test.multi.company'].with_user(self.user_admin).create({ + 'name': 'Multi Company Record', + 'company_id': False, + }) + + # self.env.company.id = Main Company AND test_record.company_id = False + self.assertEqual(self.env.company.id, main_company.id) + self.assertEqual(test_record.company_id.id, False) + template_values = test_record._notify_prepare_template_context(test_record.message_ids, {}) + self.assertEqual(template_values.get('company').id, self.env.company.id) + + # self.env.company.id = Other Company AND test_record.company_id = False + current_user.company_id = other_company + test_record = self.env['mail.test.multi.company'].browse(test_record.id) + self.assertEqual(self.env.company.id, other_company.id) + self.assertEqual(test_record.company_id.id, False) + template_values = test_record._notify_prepare_template_context(test_record.message_ids, {}) + self.assertEqual(template_values.get('company').id, self.env.company.id) + + # self.env.company.id = Other Company AND test_record.company_id = Main Company + test_record.company_id = main_company + test_record = self.env['mail.test.multi.company'].browse(test_record.id) + self.assertEqual(self.env.company.id, other_company.id) + self.assertEqual(test_record.company_id.id, main_company.id) + template_values = test_record._notify_prepare_template_context(test_record.message_ids, {}) + self.assertEqual(template_values.get('company').id, main_company.id) + def test_notify_recipients_internals(self): pdata = self._generate_notify_recipients(self.partner_1 | self.partner_employee) msg_vals = {