123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # -*- coding: utf-8 -*-
- # © 2016 Antonio Espinosa - <antonio.espinosa@tecnativa.com>
- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
- from openerp import models, api
- import logging
- _logger = logging.getLogger(__name__)
- class MailMessage(models.Model):
- _inherit = "mail.message"
- def _tracking_status_map_get(self):
- return {
- 'False': 'waiting',
- 'error': 'error',
- 'deferred': 'sent',
- 'sent': 'sent',
- 'delivered': 'delivered',
- 'opened': 'opened',
- 'rejected': 'error',
- 'spam': 'error',
- 'unsub': 'opened',
- 'bounced': 'error',
- 'soft-bounced': 'error',
- }
- def _partner_tracking_status_get(self, tracking_email):
- tracking_status_map = self._tracking_status_map_get()
- status = 'unknown'
- if tracking_email:
- tracking_email_status = str(tracking_email.state)
- status = tracking_status_map.get(tracking_email_status, 'unknown')
- return status
- @api.model
- def _message_read_dict_postprocess(self, messages, message_tree):
- res = super(MailMessage, self)._message_read_dict_postprocess(
- messages, message_tree)
- for message_dict in messages:
- mail_message_id = message_dict.get('id', False)
- if mail_message_id:
- partner_trackings = {}
- for partner in message_dict.get('partner_ids', []):
- partner_id = partner[0]
- tracking_email = self.env['mail.tracking.email'].search([
- ('mail_message_id', '=', mail_message_id),
- ('partner_id', '=', partner_id),
- ], limit=1)
- status = self._partner_tracking_status_get(tracking_email)
- partner_trackings[str(partner_id)] = (
- status, tracking_email.id)
- message_dict['partner_trackings'] = partner_trackings
- return res
|