diff --git a/mail_chatter_statistics/__init__.py b/mail_chatter_statistics/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/mail_chatter_statistics/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/mail_chatter_statistics/__manifest__.py b/mail_chatter_statistics/__manifest__.py new file mode 100644 index 0000000000..20979e4bcd --- /dev/null +++ b/mail_chatter_statistics/__manifest__.py @@ -0,0 +1,15 @@ +{ + "name": "Mail Chatter Statistics", + "version": "16.0.1.0.0", + "author": "Avanzosc", + "summary": "Add email tracking functionality to Odoo chatter.", + "website": "https://github.com/avanzosc/odoo-addons", + "license": "LGPL-3", + "depends": ["mail", "mass_mailing"], + "data": [ + "views/mail_mail_views.xml", + "views/mailing_trace_views.xml", + ], + "installable": True, + "application": False, +} diff --git a/mail_chatter_statistics/models/__init__.py b/mail_chatter_statistics/models/__init__.py new file mode 100644 index 0000000000..afafc5b6d9 --- /dev/null +++ b/mail_chatter_statistics/models/__init__.py @@ -0,0 +1,2 @@ +from . import mail_mail +from . import mailing_trace diff --git a/mail_chatter_statistics/models/mail_mail.py b/mail_chatter_statistics/models/mail_mail.py new file mode 100644 index 0000000000..3a13b5bb7a --- /dev/null +++ b/mail_chatter_statistics/models/mail_mail.py @@ -0,0 +1,32 @@ +from odoo import models + + +class MailMail(models.Model): + _inherit = "mail.mail" + + def send(self, auto_commit=False, raise_exception=False): + res = super().send(auto_commit=auto_commit, raise_exception=raise_exception) + + for mail in self: + trace = self.env["mailing.trace"].create( + { + "mail_id": mail.id, + "email": mail.email_to, + "status": "sent", + "message_id": mail.message_id, + } + ) + mail.body_html = self._add_tracking(mail.body_html, trace.id) + trace.write({"status": "tracking_added"}) + + return res + + def _add_tracking(self, body_html, trace_id): + """ + Agregar píxel de seguimiento y reemplazar enlaces para el seguimiento de clics + """ + tracking_pixel = f'' + body_html = body_html.replace("", f"{tracking_pixel}") + + return body_html diff --git a/mail_chatter_statistics/models/mailing_trace.py b/mail_chatter_statistics/models/mailing_trace.py new file mode 100644 index 0000000000..af5bd9691b --- /dev/null +++ b/mail_chatter_statistics/models/mailing_trace.py @@ -0,0 +1,36 @@ +from odoo import fields, models + + +class MailingTrace(models.Model): + _name = "mailing.trace" + _description = "Email Tracking for Chatter" + + mail_id = fields.Many2one("mail.mail", string="Mail") + email = fields.Char(string="Email") + message_id = fields.Char(string="Message ID") + status = fields.Selection( + [ + ("sent", "Sent"), + ("tracking_added", "Tracking Added"), + ("opened", "Opened"), + ("clicked", "Clicked"), + ("bounced", "Bounced"), + ], + string="Status", + ) + open_count = fields.Integer(string="Open Count", default=0) + click_count = fields.Integer(string="Click Count", default=0) + + def track_open(self): + """ + Método que incrementa el contador de aperturas. + """ + self.open_count += 1 + self.status = "opened" + + def track_click(self): + """ + Método que incrementa el contador de clics. + """ + self.click_count += 1 + self.status = "clicked" diff --git a/mail_chatter_statistics/views/mail_mail_views.xml b/mail_chatter_statistics/views/mail_mail_views.xml new file mode 100644 index 0000000000..34d9429f49 --- /dev/null +++ b/mail_chatter_statistics/views/mail_mail_views.xml @@ -0,0 +1,18 @@ + + + mail.mail.form.view.stats + mail.mail + + + +