diff --git a/mail_tracking/__manifest__.py b/mail_tracking/__manifest__.py index 606e3649b..738e9a745 100644 --- a/mail_tracking/__manifest__.py +++ b/mail_tracking/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Email tracking", "summary": "Email tracking system for all mails sent", - "version": "11.0.2.0.2", + "version": "11.0.2.1.0", "category": "Social Network", "website": "http://github.com/OCA/social", "author": "Tecnativa, " diff --git a/mail_tracking/i18n/mail_tracking.pot b/mail_tracking/i18n/mail_tracking.pot index 88a433b05..90495cc27 100644 --- a/mail_tracking/i18n/mail_tracking.pot +++ b/mail_tracking/i18n/mail_tracking.pot @@ -121,10 +121,12 @@ msgid "Deferred" msgstr "" #. module: mail_tracking +#: code:addons/mail_tracking/models/mail_message.py:41 #: model:ir.ui.view,arch_db:mail_tracking.view_mail_tracking_email_search #: model:ir.ui.view,arch_db:mail_tracking.view_mail_tracking_event_search #: selection:mail.tracking.email,state:0 #: selection:mail.tracking.event,event_type:0 +#, python-format msgid "Delivered" msgstr "" @@ -167,8 +169,10 @@ msgid "Email bounced" msgstr "" #. module: mail_tracking +#: code:addons/mail_tracking/models/mail_message.py:40 #: model:ir.ui.view,arch_db:mail_tracking.view_mail_tracking_event_form #: selection:mail.tracking.email,state:0 +#, python-format msgid "Error" msgstr "" @@ -294,7 +298,7 @@ msgstr "" #. module: mail_tracking #. openerp-web -#: code:addons/mail_tracking/static/src/js/mail_tracking.js:61 +#: code:addons/mail_tracking/static/src/js/mail_tracking.js:59 #, python-format msgid "Message tracking" msgstr "" @@ -319,7 +323,9 @@ msgid "Open" msgstr "" #. module: mail_tracking +#: code:addons/mail_tracking/models/mail_message.py:42 #: selection:mail.tracking.email,state:0 +#, python-format msgid "Opened" msgstr "" @@ -380,10 +386,12 @@ msgid "Sender email" msgstr "" #. module: mail_tracking +#: code:addons/mail_tracking/models/mail_message.py:41 #: model:ir.ui.view,arch_db:mail_tracking.view_mail_tracking_email_search #: model:ir.ui.view,arch_db:mail_tracking.view_mail_tracking_event_search #: selection:mail.tracking.email,state:0 #: selection:mail.tracking.event,event_type:0 +#, python-format msgid "Sent" msgstr "" @@ -410,10 +418,9 @@ msgid "State" msgstr "" #. module: mail_tracking -#. openerp-web -#: code:addons/mail_tracking/static/src/xml/mail_tracking.xml:98 +#: code:addons/mail_tracking/models/mail_message.py:43 #, python-format -msgid "Status: unknown" +msgid "Status: %s" msgstr "" #. module: mail_tracking @@ -458,7 +465,7 @@ msgstr "" #. module: mail_tracking #. openerp-web -#: code:addons/mail_tracking/static/src/js/mail_tracking.js:41 +#: code:addons/mail_tracking/static/src/js/mail_tracking.js:39 #, python-format msgid "Tracking partner" msgstr "" @@ -479,6 +486,12 @@ msgstr "" msgid "UTC timestamp" msgstr "" +#. module: mail_tracking +#: code:addons/mail_tracking/models/mail_message.py:42 +#, python-format +msgid "Unknown" +msgstr "" + #. module: mail_tracking #: model:ir.ui.view,arch_db:mail_tracking.view_mail_tracking_event_search msgid "Unsubscribe" @@ -520,6 +533,12 @@ msgstr "" msgid "User country" msgstr "" +#. module: mail_tracking +#: code:addons/mail_tracking/models/mail_message.py:40 +#, python-format +msgid "Waiting" +msgstr "" + #. module: mail_tracking #: model:ir.model,name:mail_tracking.model_ir_mail_server msgid "ir.mail_server" diff --git a/mail_tracking/models/mail_message.py b/mail_tracking/models/mail_message.py index 38d10e063..33c86b945 100644 --- a/mail_tracking/models/mail_message.py +++ b/mail_tracking/models/mail_message.py @@ -2,7 +2,7 @@ # Copyright 2019 Alexandre Díaz # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, api, fields +from odoo import _, models, api, fields from odoo.tools import email_split @@ -36,6 +36,12 @@ class MailMessage(models.Model): status = tracking_status_map.get(tracking_email_status, 'unknown') return status + def _partner_tracking_status_human_get(self, status): + statuses = {'waiting': _('Waiting'), 'error': _('Error'), + 'sent': _('Sent'), 'delivered': _('Delivered'), + 'opened': _('Opened'), 'unknown': _('Unknown')} + return _("Status: %s") % statuses[status] + def tracking_status(self): res = {} for message in self: @@ -45,14 +51,27 @@ class MailMessage(models.Model): trackings = self.env['mail.tracking.email'].sudo().search([ ('mail_message_id', '=', message.id), ]) + # Get Cc recipients + email_cc_list = email_split(message.email_cc) + if any(email_cc_list): + partners |= partners.search([('email', 'in', email_cc_list)]) + email_cc_list = set(email_cc_list) # Search all trackings for this message for tracking in trackings: status = self._partner_tracking_status_get(tracking) recipient = ( tracking.partner_id.name or tracking.recipient) - partner_trackings.append(( - status, tracking.id, recipient, tracking.partner_id.id)) + partner_trackings.append({ + 'status': status, + 'status_human': + self._partner_tracking_status_human_get(status), + 'tracking_id': tracking.id, + 'recipient': recipient, + 'partner_id': tracking.partner_id.id, + 'isCc': False, + }) if tracking.partner_id: + email_cc_list.discard(tracking.partner_id.email) partners_already |= tracking.partner_id # Search all recipients for this message if message.partner_ids: @@ -63,36 +82,32 @@ class MailMessage(models.Model): partners -= partners_already for partner in partners: # If there is partners not included, then status is 'unknown' - partner_trackings.append(( - 'unknown', False, partner.name, partner.id, partner.email)) - res[message.id] = partner_trackings - return res - - @api.multi - def _get_email_cc(self): - """This method gets all Cc mails and the associated partner if exist. - The result is a dictionary by 'message id' with a list of tuples - (str:email_cc, list:[partner id, partner display_name] or False) - """ - res = {} - ResPartnerObj = self.env['res.partner'] - for message in self: - email_cc_list = email_split(message.email_cc) - email_cc_list_checked = [] - if any(email_cc_list): - partners = ResPartnerObj.search([ - ('email', 'in', email_cc_list) - ]) - email_cc_list = set(email_cc_list) - for partner in partners: + # Because can be an Cc recipient + isCc = False + if partner.email in email_cc_list: email_cc_list.discard(partner.email) - email_cc_list_checked.append( - (partner.email, [partner.id, partner.display_name])) - for email in email_cc_list: - email_cc_list_checked.append((email, False)) - res.update({ - message.id: email_cc_list_checked - }) + isCc = True + partner_trackings.append({ + 'status': 'unknown', + 'status_human': + self._partner_tracking_status_human_get('unknown'), + 'tracking_id': False, + 'recipient': partner.name, + 'partner_id': partner.id, + 'isCc': isCc, + }) + for email in email_cc_list: + # If there is Cc without partner + partner_trackings.append({ + 'status': 'unknown', + 'status_human': + self._partner_tracking_status_human_get('unknown'), + 'tracking_id': False, + 'recipient': email, + 'partner_id': False, + 'isCc': True, + }) + res[message.id] = partner_trackings return res @api.model @@ -102,11 +117,9 @@ class MailMessage(models.Model): mail_message_ids = {m.get('id') for m in messages if m.get('id')} mail_messages = self.browse(mail_message_ids) partner_trackings = mail_messages.tracking_status() - email_cc = mail_messages._get_email_cc() for message_dict in messages: mail_message_id = message_dict.get('id', False) if mail_message_id: message_dict['partner_trackings'] = \ partner_trackings[mail_message_id] - message_dict['email_cc'] = email_cc[mail_message_id] return res diff --git a/mail_tracking/static/src/js/mail_tracking.js b/mail_tracking/static/src/js/mail_tracking.js index 25abcd345..72f4b5106 100644 --- a/mail_tracking/static/src/js/mail_tracking.js +++ b/mail_tracking/static/src/js/mail_tracking.js @@ -17,7 +17,6 @@ odoo.define('mail_tracking.partner_tracking', function (require) { chat_manager.make_message = function (data) { var msg = this._make_message_super(data); msg.partner_trackings = data.partner_trackings || []; - msg.email_cc = data.email_cc || []; return msg; }; @@ -30,7 +29,6 @@ odoo.define('mail_tracking.partner_tracking', function (require) { _preprocess_message: function () { var msg = this._super.apply(this, arguments); msg.partner_trackings = msg.partner_trackings || []; - msg.email_cc = msg.email_cc || []; return msg; }, on_tracking_partner_click: function (event) { diff --git a/mail_tracking/static/src/xml/mail_tracking.xml b/mail_tracking/static/src/xml/mail_tracking.xml index 41e102370..92fe59218 100644 --- a/mail_tracking/static/src/xml/mail_tracking.xml +++ b/mail_tracking/static/src/xml/mail_tracking.xml @@ -5,39 +5,39 @@