From 7e271bb5ca948d56c577a949be9e0653ca4ff84c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20D=C3=ADaz?= Date: Thu, 16 Apr 2020 19:36:32 +0200 Subject: [PATCH] [IMP] mail_tracking: Ignore catchall --- mail_tracking/models/__init__.py | 1 + mail_tracking/models/ir_config_parameter.py | 24 +++++++++++++++++++++ mail_tracking/models/mail_alias.py | 9 +++++++- mail_tracking/tests/test_mail_tracking.py | 11 ++++++---- 4 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 mail_tracking/models/ir_config_parameter.py diff --git a/mail_tracking/models/__init__.py b/mail_tracking/models/__init__.py index 0f2e248..1a5aded 100644 --- a/mail_tracking/models/__init__.py +++ b/mail_tracking/models/__init__.py @@ -10,3 +10,4 @@ from . import res_partner from . import mail_thread from . import mail_resend_message from . import mail_alias +from . import ir_config_parameter diff --git a/mail_tracking/models/ir_config_parameter.py b/mail_tracking/models/ir_config_parameter.py new file mode 100644 index 0000000..f5f7d1d --- /dev/null +++ b/mail_tracking/models/ir_config_parameter.py @@ -0,0 +1,24 @@ +# Copyright 2020 Tecnativa - Alexandre Díaz +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, models + + +class IrConfigParameter(models.Model): + _inherit = "ir.config_parameter" + + @api.model_create_multi + def create(self, vals_list): + res = super().create(vals_list) + self.env["mail.alias"].clear_caches() + return res + + def write(self, vals): + res = super().write(vals) + self.env["mail.alias"].clear_caches() + return res + + def unlink(self): + res = super().unlink() + self.env["mail.alias"].clear_caches() + return res diff --git a/mail_tracking/models/mail_alias.py b/mail_tracking/models/mail_alias.py index 800259c..a02a657 100644 --- a/mail_tracking/models/mail_alias.py +++ b/mail_tracking/models/mail_alias.py @@ -10,10 +10,17 @@ class MailAlias(models.Model): @api.model @tools.ormcache() def get_aliases(self): - return { + aliases = { x["display_name"] for x in self.search_read([("alias_name", "!=", False)], ["display_name"]) } + IrConfigParamObj = self.env["ir.config_parameter"].sudo() + catchall = "{}@{}".format( + IrConfigParamObj.get_param("mail.catchall.alias"), + IrConfigParamObj.get_param("mail.catchall.domain"), + ) + aliases.add(catchall) + return aliases @api.model_create_multi def create(self, vals_list): diff --git a/mail_tracking/tests/test_mail_tracking.py b/mail_tracking/tests/test_mail_tracking.py index 62c2299..968f06f 100644 --- a/mail_tracking/tests/test_mail_tracking.py +++ b/mail_tracking/tests/test_mail_tracking.py @@ -211,7 +211,7 @@ class TestMailTracking(TransactionCase): def _check_partner_trackings_to(self, message): message_dict = message.message_format()[0] - self.assertEqual(len(message_dict["partner_trackings"]), 3) + self.assertEqual(len(message_dict["partner_trackings"]), 4) # mail cc foundPartner = False foundNoPartner = False @@ -253,16 +253,19 @@ class TestMailTracking(TransactionCase): "res_id": self.recipient.id, "partner_ids": [(4, self.recipient.id)], "email_to": "Dominique Pinon " - ", sender@example.com, recipient@example.com", + ", sender@example.com, recipient@example.com" + ", TheCatchall@test.com", "body": "

This is another test message

", } ) message._moderate_accept() recipients = self.recipient._message_get_suggested_recipients() - self.assertEqual(len(recipients[self.recipient.id]), 3) + self.assertEqual(len(recipients[self.recipient.id]), 4) self._check_partner_trackings_to(message) # Catchall + Alias - self.env["ir.config_parameter"].set_param("mail.catchall.domain", "test.com") + IrConfigParamObj = self.env["ir.config_parameter"].sudo() + IrConfigParamObj.set_param("mail.catchall.alias", "TheCatchall") + IrConfigParamObj.set_param("mail.catchall.domain", "test.com") self.env["mail.alias"].create( { "alias_model_id": self.env["ir.model"]._get("res.partner").id,