Skip to content

Commit

Permalink
[FIX] mail_composer_cc_bcc:send RFQ by email
Browse files Browse the repository at this point in the history
  • Loading branch information
trisdoan committed Feb 26, 2025
1 parent 678b96c commit 4236484
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 9 deletions.
32 changes: 23 additions & 9 deletions mail_composer_cc_bcc/models/mail_thread.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,15 @@ class MailThread(models.AbstractModel):
def _message_create(self, values_list):
context = self.env.context
res = super()._message_create(values_list)
partners_cc = context.get("partner_cc_ids", None)
if partners_cc:
res.recipient_cc_ids = partners_cc
partners_bcc = context.get("partner_bcc_ids", None)
if partners_bcc:
res.recipient_bcc_ids = partners_bcc
for message in res:
if message.message_type == "notification":
continue
partners_cc = context.get("partner_cc_ids", None)
if partners_cc:
message.recipient_cc_ids = partners_cc
partners_bcc = context.get("partner_bcc_ids", None)
if partners_bcc:
message.recipient_bcc_ids = partners_bcc
return res

def _notify_by_email_get_base_mail_values(self, message, additional_values=None):
Expand All @@ -26,10 +29,11 @@ def _notify_by_email_get_base_mail_values(self, message, additional_values=None)
can be sent to those addresses.
"""
context = self.env.context

res = super()._notify_by_email_get_base_mail_values(
message, additional_values=additional_values
)
if context.get("skip_adding_cc_bcc", False):
return res
partners_cc = context.get("partner_cc_ids", None)
if partners_cc:
res["email_cc"] = format_emails(partners_cc)
Expand All @@ -48,7 +52,8 @@ def _notify_get_recipients(self, message, msg_vals, **kwargs):
rdata = super()._notify_get_recipients(message, msg_vals, **kwargs)
context = self.env.context
is_from_composer = context.get("is_from_composer", False)
if not is_from_composer:
skip_adding_cc_bcc = context.get("skip_adding_cc_bcc", False)
if not is_from_composer or skip_adding_cc_bcc:
return rdata
for pdata in rdata:
pdata["type"] = "customer"
Expand Down Expand Up @@ -96,6 +101,9 @@ def _notify_by_email_get_final_mail_values(
recipient_ids, base_mail_values, additional_values=additional_values
)
context = self.env.context
skip_adding_cc_bcc = context.get("skip_adding_cc_bcc", False)
if skip_adding_cc_bcc:
return res
r_ids = list(recipient_ids)
partners_cc = context.get("partner_cc_ids", None)
if partners_cc:
Expand All @@ -114,7 +122,8 @@ def _notify_get_recipients_classify(
recipient_data, model_name, msg_vals=msg_vals
)
is_from_composer = self.env.context.get("is_from_composer", False)
if not is_from_composer:
skip_adding_cc_bcc = self.env.context.get("skip_adding_cc_bcc", False)
if not is_from_composer or skip_adding_cc_bcc:
return res
ids = []
customer_data = None
Expand All @@ -130,3 +139,8 @@ def _notify_get_recipients_classify(
else:
customer_data["recipients"] += ids
return [customer_data]

def _notify_thread(self, message, msg_vals=False, **kwargs):
if message.message_type == "notification":
self = self.with_context(skip_adding_cc_bcc=True)
return super(MailThread, self)._notify_thread(message, msg_vals, **kwargs)
58 changes: 58 additions & 0 deletions mail_composer_cc_bcc/tests/test_mail_cc_bcc.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@

import hashlib
import inspect
from unittest.mock import patch

from odoo import tools
from odoo.tests import Form

from odoo.addons.mail.models.mail_mail import MailMail as upstream
from odoo.addons.mail.models.mail_thread import MailThread
from odoo.addons.mail.tests.test_mail_composer import TestMailComposer

VALID_HASHES = [
Expand Down Expand Up @@ -187,3 +189,59 @@ def test_mail_without_cc_bcc(self):
if subject == mail.get("subject"):
sent_mails += 1
self.assertEqual(sent_mails, 1)

def test_tracking_mail_without_cc_bcc(self):
Partner = self.env["res.partner"]
p1 = Partner.create(
{"name": "Customer1", "email": "[email protected]"}
).with_context(mail_notrack=False)
self.cr.precommit.clear()
p2 = Partner.create({"name": "Customer2", "email": "[email protected]"})

original_message_post = MailThread.message_post

def patched_message_post(self, **kwargs):
self = self.with_context(
mail_post_autofollow=self.env.context.get("mail_post_autofollow", True),
)
# to trigger tracking email
p1.write({"email": "[email protected]"})
return original_message_post(self, **kwargs)

ctx = {
"default_partner_ids": p1.ids,
"default_model": Partner._name,
"default_res_id": p1.id,
"mail_notify_force_send": True,
}
form = Form(self.env["mail.compose.message"].with_context(**ctx))
form.body = "<p>Hello</p>"
composer = form.save()
composer.partner_bcc_ids = p2.ids
with self.mock_mail_gateway(), self.mock_mail_app(), patch(
"odoo.addons.mail.models.mail_thread.MailThread.message_post",
new=patched_message_post,
):
composer._action_send_mail()
self.flush_tracking()
self.assertEqual(
len(self._new_msgs),
2,
)
self.assertEqual(
self.ref("mail.mt_note"),
self._new_msgs[1].subtype_id.id,
"Expected a tracking message",
)

# Main email should include cc/bcc
main_message = self._new_msgs.filtered(lambda x: x.message_type == "comment")
self.assertEqual(len(main_message.notified_partner_ids), 2)
self.assertEqual(len(main_message.notification_ids), 2)
main_mail = main_message.mail_ids
self.assertEqual(len(main_mail.recipient_ids), 2)

# tracking email should not include cc/bcc
tracking_message = self._new_msgs.filtered(lambda x: x.message_type == "note")
tracking_field_mail = tracking_message.mail_ids
self.assertFalse(tracking_field_mail.email_bcc)

0 comments on commit 4236484

Please sign in to comment.