Skip to content

Commit

Permalink
[MIG] mail_tracking: Migration to 18.0
Browse files Browse the repository at this point in the history
  • Loading branch information
trisdoan committed Oct 23, 2024
1 parent 70b35ee commit ad59bec
Show file tree
Hide file tree
Showing 35 changed files with 580 additions and 475 deletions.
10 changes: 10 additions & 0 deletions mail_tracking/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,16 @@ Contributors

- Agustín Payen Sandoval

- `Trobz <https://www.trobz.com>`__:

- Tris Doan

Other credits
-------------

The migration of this module from 17.0 to 18.0 was financially supported
by Camptocamp.

Maintainers
-----------

Expand Down
2 changes: 1 addition & 1 deletion mail_tracking/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
{
"name": "Email tracking",
"summary": "Email tracking system for all mails sent",
"version": "17.0.1.0.0",
"version": "18.0.1.0.0",
"category": "Social Network",
"website": "https://github.com/OCA/social",
"author": ("Tecnativa, Odoo Community Association (OCA)"),
Expand Down
8 changes: 7 additions & 1 deletion mail_tracking/controllers/mailbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from odoo.http import request, route

from odoo.addons.mail.controllers.mailbox import MailboxController
from odoo.addons.mail.tools.discuss import Store


class MailTrackingMailBoxController(MailboxController):
Expand All @@ -19,4 +20,9 @@ def discuss_failed_messages(
around=around,
limit=limit,
)
return {**res, "messages": res["messages"].message_format()}
messages = res.pop("messages")
return {
**res,
"data": Store(messages, for_current_user=True).get_result(),
"messages": Store.many_ids(messages),
}
196 changes: 92 additions & 104 deletions mail_tracking/demo/demo.xml
Original file line number Diff line number Diff line change
@@ -1,125 +1,113 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- Message with CC -->
<record id="mail_message_cc" model="mail.message">
<field name="model">res.partner</field>
<field name="res_id" ref="base.partner_demo" />
<field name="message_type">comment</field>
<field name="subtype_id" ref="mail.mt_comment" />
<field
<!-- Message with CC -->
<record id="mail_message_cc" model="mail.message">
<field name="model">res.partner</field>
<field name="res_id" ref="base.partner_demo" />
<field name="message_type">comment</field>
<field name="subtype_id" ref="mail.mt_comment" />
<field
name="email_cc"
>[email protected],[email protected],[email protected]</field>
<field name="mail_tracking_needs_action">1</field>
<field name="body"><![CDATA[<p>This is a message with CC</p>]]></field>
<field name="email_from">[email protected]</field>
<field name="author_id" ref="base.res_partner_1" />
<field
name="partner_ids"
eval="[Command.set([ref('base.partner_demo')])]"
/>
<field name="subject">Message with CC</field>
</record>
<field name="mail_tracking_needs_action">1</field>
<field name="body"><![CDATA[<p>This is a message with CC</p>]]></field>
<field name="email_from">[email protected]</field>
<field name="author_id" ref="base.res_partner_1" />
<field name="partner_ids" eval="[Command.set([ref('base.partner_demo')])]" />
<field name="subject">Message with CC</field>
</record>

<record id="mail_tracking_email_cc" model="mail.tracking.email">
<field name="name">Message with CC</field>
<field name="mail_message_id" ref="mail_message_cc" />
<field name="partner_id" ref="base.res_partner_1" />
<field name="recipient">[email protected]</field>
<field name="sender">[email protected]</field>
<field name="state">sent</field>
<field name="time" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')" />
</record>
<record id="mail_tracking_email_cc" model="mail.tracking.email">
<field name="name">Message with CC</field>
<field name="mail_message_id" ref="mail_message_cc" />
<field name="partner_id" ref="base.res_partner_1" />
<field name="recipient">[email protected]</field>
<field name="sender">[email protected]</field>
<field name="state">sent</field>
<field name="time" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')" />
</record>

<!-- Failed Message A -->
<record id="mail_message_failed" model="mail.message">
<field name="model">res.partner</field>
<field name="res_id" ref="base.partner_demo" />
<field name="message_type">comment</field>
<field name="subtype_id" ref="mail.mt_comment" />
<field name="mail_tracking_needs_action">1</field>
<field name="body"><![CDATA[<p>This is a failed message</p>]]></field>
<field name="email_from">[email protected]</field>
<field name="author_id" ref="base.res_partner_1" />
<field
name="partner_ids"
eval="[Command.set([ref('base.partner_demo')])]"
/>
<field
<!-- Failed Message A -->
<record id="mail_message_failed" model="mail.message">
<field name="model">res.partner</field>
<field name="res_id" ref="base.partner_demo" />
<field name="message_type">comment</field>
<field name="subtype_id" ref="mail.mt_comment" />
<field name="mail_tracking_needs_action">1</field>
<field name="body"><![CDATA[<p>This is a failed message</p>]]></field>
<field name="email_from">[email protected]</field>
<field name="author_id" ref="base.res_partner_1" />
<field name="partner_ids" eval="[Command.set([ref('base.partner_demo')])]" />
<field
name="notification_ids"
eval="[Command.create({'res_partner_id': ref('base.partner_demo')}),Command.create({'res_partner_id': ref('base.res_partner_1'), 'notification_status': 'exception'})]"
/>
<field name="subject">Failed Message</field>
</record>
<field name="subject">Failed Message</field>
</record>

<record id="mail_tracking_email_failed" model="mail.tracking.email">
<field name="name">Failed Message</field>
<field name="mail_message_id" ref="mail_message_failed" />
<field name="partner_id" ref="base.res_partner_1" />
<field name="recipient">[email protected]</field>
<field name="sender">[email protected]</field>
<field name="state">error</field>
<field name="time" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')" />
</record>
<record id="mail_tracking_email_failed" model="mail.tracking.email">
<field name="name">Failed Message</field>
<field name="mail_message_id" ref="mail_message_failed" />
<field name="partner_id" ref="base.res_partner_1" />
<field name="recipient">[email protected]</field>
<field name="sender">[email protected]</field>
<field name="state">error</field>
<field name="time" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')" />
</record>

<!-- Failed Message B -->
<record id="mail_message_failed_b" model="mail.message">
<field name="model">res.partner</field>
<field name="res_id" ref="base.partner_demo" />
<field name="message_type">comment</field>
<field name="subtype_id" ref="mail.mt_comment" />
<field name="mail_tracking_needs_action">1</field>
<field name="body"><![CDATA[<p>This is another failed message</p>]]></field>
<field name="email_from">[email protected]</field>
<field name="author_id" ref="base.res_partner_10" />
<field
name="partner_ids"
eval="[Command.set([ref('base.partner_demo')])]"
/>
<field
<!-- Failed Message B -->
<record id="mail_message_failed_b" model="mail.message">
<field name="model">res.partner</field>
<field name="res_id" ref="base.partner_demo" />
<field name="message_type">comment</field>
<field name="subtype_id" ref="mail.mt_comment" />
<field name="mail_tracking_needs_action">1</field>
<field name="body"><![CDATA[<p>This is another failed message</p>]]></field>
<field name="email_from">[email protected]</field>
<field name="author_id" ref="base.res_partner_10" />
<field name="partner_ids" eval="[Command.set([ref('base.partner_demo')])]" />
<field
name="notification_ids"
eval="[Command.create({'res_partner_id': ref('base.partner_demo')}),Command.create({'res_partner_id': ref('base.res_partner_10'), 'notification_status': 'bounce'})]"
/>
<field name="subject">Failed Message</field>
</record>
<field name="subject">Failed Message</field>
</record>

<record id="mail_tracking_email_failed_b" model="mail.tracking.email">
<field name="name">Failed Message</field>
<field name="mail_message_id" ref="mail_message_failed_b" />
<field name="partner_id" ref="base.res_partner_10" />
<field name="recipient">[email protected]</field>
<field name="sender">[email protected]</field>
<field name="state">error</field>
<field name="time" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')" />
</record>
<record id="mail_tracking_email_failed_b" model="mail.tracking.email">
<field name="name">Failed Message</field>
<field name="mail_message_id" ref="mail_message_failed_b" />
<field name="partner_id" ref="base.res_partner_10" />
<field name="recipient">[email protected]</field>
<field name="sender">[email protected]</field>
<field name="state">error</field>
<field name="time" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')" />
</record>

<!-- Failed Message C -->
<record id="mail_message_failed_c" model="mail.message">
<field name="model">res.partner</field>
<field name="res_id" ref="base.partner_demo" />
<field name="message_type">comment</field>
<field name="subtype_id" ref="mail.mt_comment" />
<field name="mail_tracking_needs_action">1</field>
<field name="body"><![CDATA[<p>This is another failed message</p>]]></field>
<field name="email_from">[email protected]</field>
<field name="author_id" ref="base.partner_admin" />
<field
name="partner_ids"
eval="[Command.set([ref('base.partner_demo')])]"
/>
<field
<!-- Failed Message C -->
<record id="mail_message_failed_c" model="mail.message">
<field name="model">res.partner</field>
<field name="res_id" ref="base.partner_demo" />
<field name="message_type">comment</field>
<field name="subtype_id" ref="mail.mt_comment" />
<field name="mail_tracking_needs_action">1</field>
<field name="body"><![CDATA[<p>This is another failed message</p>]]></field>
<field name="email_from">[email protected]</field>
<field name="author_id" ref="base.partner_admin" />
<field name="partner_ids" eval="[Command.set([ref('base.partner_demo')])]" />
<field
name="notification_ids"
eval="[Command.create({'res_partner_id': ref('base.partner_demo')}),Command.create({'res_partner_id': ref('base.partner_admin'), 'notification_status': 'exception'})]"
/>
<field name="subject">Failed Message</field>
</record>
<field name="subject">Failed Message</field>
</record>

<record id="mail_tracking_email_failed_c" model="mail.tracking.email">
<field name="name">Failed Message</field>
<field name="mail_message_id" ref="mail_message_failed_c" />
<field name="partner_id" ref="base.partner_admin" />
<field name="recipient">[email protected]</field>
<field name="sender">[email protected]</field>
<field name="state">error</field>
<field name="time" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')" />
</record>
<record id="mail_tracking_email_failed_c" model="mail.tracking.email">
<field name="name">Failed Message</field>
<field name="mail_message_id" ref="mail_message_failed_c" />
<field name="partner_id" ref="base.partner_admin" />
<field name="recipient">[email protected]</field>
<field name="sender">[email protected]</field>
<field name="state">error</field>
<field name="time" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')" />
</record>
</odoo>
8 changes: 5 additions & 3 deletions mail_tracking/models/mail_mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def _tracking_email_prepare(self, email):
email_to = COMMASPACE.join(email_to_list)
return {
"name": self.subject,
"timestamp": "%.6f" % ts,
"timestamp": f"{ts:.6f}",
"time": fields.Datetime.to_string(dt),
"mail_id": self.id,
"mail_message_id": self.mail_message_id.id,
Expand All @@ -28,14 +28,16 @@ def _tracking_email_prepare(self, email):
"sender": self.email_from,
}

def _prepare_outgoing_list(self, recipients_follower_status=None):
def _prepare_outgoing_list(
self, mail_server=False, recipients_follower_status=None
):
"""Creates the mail.tracking.email record and adds the image tracking
to the email. Please note that because we can't add mail headers in this
function, the added tracking image will later (IrMailServer.build_email)
also be used to extract the mail.tracking.email record id and to set the
X-Odoo-MailTracking-ID header there.
"""
emails = super()._prepare_outgoing_list(recipients_follower_status)
emails = super()._prepare_outgoing_list(mail_server, recipients_follower_status)
for email in emails:
vals = self._tracking_email_prepare(email)
tracking_email = self.env["mail.tracking.email"].sudo().create(vals)
Expand Down
32 changes: 10 additions & 22 deletions mail_tracking/models/mail_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
from odoo.osv import expression
from odoo.tools import email_split

from odoo.addons.mail.tools.discuss import Store


class MailMessage(models.Model):
_inherit = "mail.message"
Expand Down Expand Up @@ -267,7 +269,7 @@ def get_failed_messages(self):

def set_need_action_done(self):
"""This will mark the messages to be ignored in the tracking issues filter"""
self.check_access_rule("read")
self.check_access("read")
self.mail_tracking_needs_action = False
self._notify_message_notification_update()

Expand All @@ -286,29 +288,15 @@ def get_failed_messsage_info(self, ids, model):
]
return res

def _message_notification_format(self):
"""Add info for the web client"""
formatted_notifications = super()._message_notification_format()
for notification in formatted_notifications:
message = self.filtered(
lambda x, notification=notification: x.id == notification["id"]
)
notification.update(
def _extras_to_store(self, store: Store, format_reply):
res = super()._extras_to_store(store, format_reply=format_reply)
for message in self:
store.add(
message,
{
"partner_trackings": message.tracking_status(),
"mail_tracking_needs_action": message.mail_tracking_needs_action,
"is_failed_message": message.is_failed_message,
}
},
)
return formatted_notifications

def _message_format_extras(self, format_reply):
"""Add info for the web client"""
res = super()._message_format_extras(format_reply)
res.update(
{
"partner_trackings": self.tracking_status(),
"mail_tracking_needs_action": self.mail_tracking_needs_action,
"is_failed_message": self.is_failed_message,
}
)
return res
2 changes: 1 addition & 1 deletion mail_tracking/models/mail_thread.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from lxml import etree

from odoo import _, api, fields, models
from odoo.tools import email_split, email_split_and_format
from odoo.tools.mail import email_split, email_split_and_format


class MailThread(models.AbstractModel):
Expand Down
Loading

0 comments on commit ad59bec

Please sign in to comment.