Skip to content

Commit e4bfcc5

Browse files
committed
[IMP] mail_tracking_mailgun: mass mailing manual tracking
Mass mailing are tracked from mail.trace as the don't store a message in the db. In order to gather the message_id and be able to do manual checks to mailgun, that's the table where we should get the message id. TT40816
1 parent e3cdf25 commit e4bfcc5

File tree

4 files changed

+22
-6
lines changed

4 files changed

+22
-6
lines changed

mail_tracking/models/mail_tracking_email.py

+10
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class MailTrackingEmail(models.Model):
4545
mail_message_id = fields.Many2one(
4646
string="Message", comodel_name="mail.message", readonly=True, index=True
4747
)
48+
message_id = fields.Char(compute="_compute_message_id")
4849
mail_id = fields.Many2one(string="Email", comodel_name="mail.mail", readonly=True)
4950
partner_id = fields.Many2one(
5051
string="Partner", comodel_name="res.partner", readonly=True
@@ -116,6 +117,15 @@ class MailTrackingEmail(models.Model):
116117
groups="base.group_system",
117118
)
118119

120+
@api.depends("mail_message_id")
121+
def _compute_message_id(self):
122+
"""This helper field will allow us to map the message_id from either the linked
123+
mail.message or a mass.mailing mail.trace.
124+
"""
125+
self.message_id = False
126+
for tracking in self.filtered("mail_message_id"):
127+
tracking.message_id = tracking.mail_message_id.message_id
128+
119129
@api.model_create_multi
120130
def create(self, vals_list):
121131
records = super().create(vals_list)

mail_tracking_mailgun/models/mail_tracking_email.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,8 @@ def action_manual_check_mailgun(self):
202202
https://documentation.mailgun.com/en/latest/api-events.html
203203
"""
204204
api_key, api_url, domain, *__ = self._mailgun_values()
205-
for tracking in self:
206-
if not tracking.mail_message_id:
207-
raise UserError(_("There is no tracked message!"))
208-
message_id = tracking.mail_message_id.message_id.replace("<", "").replace(
209-
">", ""
210-
)
205+
for tracking in self.filtered("message_id"):
206+
message_id = tracking.message_id.replace("<", "").replace(">", "")
211207
events = []
212208
url = urljoin(api_url, "/v3/%s/events" % domain)
213209
params = {

mail_tracking_mailgun/views/mail_tracking_email.xml

+2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
<field name="inherit_id" ref="mail_tracking.view_mail_tracking_email_form" />
88
<field name="arch" type="xml">
99
<field name="state" position="before">
10+
<field name="message_id" invisible="1" />
1011
<button
1112
name="action_manual_check_mailgun"
1213
type="object"
1314
string="Re-sync Mailgun"
15+
attrs="{'invisible': [('message_id', '=', False)]}"
1416
/>
1517
</field>
1618
</field>

mail_tracking_mass_mailing/models/mail_tracking_email.py

+8
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ def _statistics_link_prepare(self, tracking):
2121
"""Inherit this method to link other object to mailing.trace"""
2222
return {"mail_tracking_id": tracking.id}
2323

24+
@api.depends("mail_stats_id")
25+
def _compute_message_id(self):
26+
"""For the mass mailings, the message id is stored in the mailing.trace record."""
27+
res = super()._compute_message_id()
28+
for tracking in self.filtered("mail_stats_id"):
29+
tracking.message_id = tracking.mail_stats_id.message_id
30+
return res
31+
2432
@api.model
2533
def create(self, vals):
2634
tracking = super().create(vals)

0 commit comments

Comments
 (0)