diff --git a/addons/mass_mailing/mail_mail.py b/addons/mass_mailing/mail_mail.py index e288e5cf1bb..917334bdda4 100644 --- a/addons/mass_mailing/mail_mail.py +++ b/addons/mass_mailing/mail_mail.py @@ -32,24 +32,20 @@ class MailMail(osv.Model): _inherit = ['mail.mail'] _columns = { - 'track': fields.boolean('Use tracking'), - } - - _defaults = { - 'track': False, + 'statistics_ids': fields.one2many( + 'mail.mail.statistics', 'mail_mail_id', + string='Statistics', + ), } def create(self, cr, uid, values, context=None): """ Override mail_mail creation to create an entry in mail.mail.statistics """ # TDE note: should be after 'all values computed', to have values (FIXME after merging other branch holding create refactoring) mail_id = super(MailMail, self).create(cr, uid, values, context=context) - mail = self.browse(cr, SUPERUSER_ID, mail_id) - if mail.track: - self.pool['mail.mail.statistics'].create( - cr, uid, { - 'mail_mail_id': mail_id, - 'message_id': mail.message_id, - }, context=context) + if values.get('statistics_ids'): + mail = self.browse(cr, SUPERUSER_ID, mail_id) + for stat in mail.statistics_ids: + self.pool['mail.mail.statistics'].write(cr, uid, [stat.id], {'message_id': mail.message_id}, context=context) return mail_id def _get_tracking_url(self, cr, uid, mail, partner=None, context=None): @@ -62,7 +58,7 @@ class MailMail(osv.Model): body = super(MailMail, self).send_get_mail_body(cr, uid, mail, partner=partner, context=context) # generate tracking URL - if mail.track: + if mail.statistics_ids: tracking_url = self._get_tracking_url(cr, uid, mail, partner, context=context) if tracking_url: body = tools.append_content_to_html(body, tracking_url, plaintext=False, container_tag='div') diff --git a/addons/mass_mailing/mail_thread.py b/addons/mass_mailing/mail_thread.py index 985d03ce2cc..5c759e71e23 100644 --- a/addons/mass_mailing/mail_thread.py +++ b/addons/mass_mailing/mail_thread.py @@ -46,14 +46,10 @@ class MailThread(osv.Model): bounce_match = tools.bounce_re.search(email_to) if bounce_match: bounced_mail_id = bounce_match.group(1) - self.pool['mail.mail'].set_bounced(cr, uid, [bounced_mail_id], context=context) - if self.pool['mail.mail'].exists(cr, uid, bounced_mail_id): - mail = self.pool['mail.mail'].browse(cr, uid, bounced_mail_id, context=context) - bounced_model = mail.model - bounced_thread_id = mail.res_id - else: - bounced_model = bounce_match.group(2) - bounced_thread_id = int(bounce_match.group(3)) if bounce_match.group(3) else 0 + stat_ids = self.pool['mail.mail.statistics'].set_bounced(cr, uid, mail_mail_ids=[bounced_mail_id], context=context) + for stat in self.pool['mail.mail.statistics'].browse(cr, uid, stat_ids, context=context): + bounced_model = stat.model + bounced_thread_id = stat.res_id _logger.info('Routing mail from %s to %s with Message-Id %s: bounced mail from mail %s, model: %s, thread_id: %s', email_from, email_to, message_id, bounced_mail_id, bounced_model, bounced_thread_id) if bounced_model and bounced_model in self.pool and hasattr(self.pool[bounced_model], 'message_receive_bounce'): diff --git a/addons/mass_mailing/mass_mailing.py b/addons/mass_mailing/mass_mailing.py index f37208e4568..4ef7e260055 100644 --- a/addons/mass_mailing/mass_mailing.py +++ b/addons/mass_mailing/mass_mailing.py @@ -288,7 +288,13 @@ class MailMailStats(osv.Model): 'the related mail_mail can be deleted separately from its statistics.' ), 'message_id': fields.char( - 'Message-ID', required=True, + 'Message-ID', + ), + 'model': fields.char( + 'Document model', + ), + 'res_id': fields.integer( + 'Document ID', ), # campaign / wave data 'mass_mailing_id': fields.many2one( @@ -333,7 +339,7 @@ class MailMailStats(osv.Model): for stat in self.browse(cr, uid, ids, context=context): if not stat.opened: self.write(cr, uid, [stat.id], {'opened': fields.datetime.now()}, context=context) - return True + return ids def set_replied(self, cr, uid, ids=None, mail_mail_ids=None, mail_message_ids=None, context=None): """ Set as replied """ @@ -346,7 +352,7 @@ class MailMailStats(osv.Model): for stat in self.browse(cr, uid, ids, context=context): if not stat.replied: self.write(cr, uid, [stat.id], {'replied': fields.datetime.now()}, context=context) - return True + return ids def set_bounced(self, cr, uid, ids=None, mail_mail_ids=None, mail_message_ids=None, context=None): """ Set as bounced """ @@ -359,4 +365,4 @@ class MailMailStats(osv.Model): for stat in self.browse(cr, uid, ids, context=context): if not stat.bounced: self.write(cr, uid, [stat.id], {'bounced': fields.datetime.now()}, context=context) - return True + return ids diff --git a/addons/mass_mailing/mass_mailing_view.xml b/addons/mass_mailing/mass_mailing_view.xml index bfe02c0ca60..680dfe87092 100644 --- a/addons/mass_mailing/mass_mailing_view.xml +++ b/addons/mass_mailing/mass_mailing_view.xml @@ -317,6 +317,7 @@ + @@ -332,6 +333,8 @@ + + diff --git a/addons/mass_mailing/wizard/mail_compose_message.py b/addons/mass_mailing/wizard/mail_compose_message.py index 6c02357c1bf..8e075eb48c6 100644 --- a/addons/mass_mailing/wizard/mail_compose_message.py +++ b/addons/mass_mailing/wizard/mail_compose_message.py @@ -53,5 +53,5 @@ class MailComposeMessage(osv.TransientModel): }, context=context) context['default_mass_mailing_id'] = mass_mailing_id for res_id in res_ids: - res[res_id]['track'] = True + res[res_id]['statistics_ids'] = [(0, 0, {'model': wizard.model, 'res_id': res_id})] return res