[IMP] mass_mailing: option to keep sent emails
[odoo/odoo.git] / addons / mass_mailing / wizard / mail_compose_message.py
1 # -*- coding: utf-8 -*-
2
3 from openerp.osv import osv, fields
4
5
6 class MailComposeMessage(osv.TransientModel):
7     """Add concept of mass mailing campaign to the mail.compose.message wizard
8     """
9     _inherit = 'mail.compose.message'
10
11     _columns = {
12         'mass_mailing_campaign_id': fields.many2one(
13             'mail.mass_mailing.campaign', 'Mass Mailing Campaign',
14         ),
15         'mass_mailing_id': fields.many2one(
16             'mail.mass_mailing', 'Mass Mailing'
17         ),
18         'mass_mailing_name': fields.char('Mass Mailing'),
19         'mailing_list_ids': fields.many2many(
20             'mail.mass_mailing.list', string='Mailing List'
21         ),
22     }
23
24     def get_mail_values(self, cr, uid, wizard, res_ids, context=None):
25         """ Override method that generated the mail content by creating the
26         mail.mail.statistics values in the o2m of mail_mail, when doing pure
27         email mass mailing. """
28         res = super(MailComposeMessage, self).get_mail_values(cr, uid, wizard, res_ids, context=context)
29         # use only for allowed models in mass mailing
30         if wizard.composition_mode == 'mass_mail' and \
31                 (wizard.mass_mailing_name or wizard.mass_mailing_id) and \
32                 wizard.model in [item[0] for item in self.pool['mail.mass_mailing']._get_mailing_model(cr, uid, context=context)]:
33             mass_mailing = wizard.mass_mailing_id
34             if not mass_mailing:
35                 reply_to_mode = wizard.no_auto_thread and 'email' or 'thread'
36                 reply_to = wizard.no_auto_thread and wizard.reply_to or False
37                 mass_mailing_id = self.pool['mail.mass_mailing'].create(
38                     cr, uid, {
39                         'mass_mailing_campaign_id': wizard.mass_mailing_campaign_id and wizard.mass_mailing_campaign_id.id or False,
40                         'name': wizard.mass_mailing_name,
41                         'template_id': wizard.template_id and wizard.template_id.id or False,
42                         'state': 'done',
43                         'reply_to_mode': reply_to_mode,
44                         'reply_to': reply_to,
45                         'sent_date': fields.datetime.now(),
46                         'body_html': wizard.body,
47                         'mailing_model': wizard.model,
48                         'mailing_domain': wizard.active_domain,
49                     }, context=context)
50                 mass_mailing = self.pool['mail.mass_mailing'].browse(cr, uid, mass_mailing_id, context=context)
51             for res_id in res_ids:
52                 res[res_id].update({
53                     'mailing_id':  mass_mailing.id,
54                     'statistics_ids': [(0, 0, {
55                         'model': wizard.model,
56                         'res_id': res_id,
57                         'mass_mailing_id': mass_mailing.id,
58                     })],
59                     # email-mode: keep original message for routing
60                     'notification': mass_mailing.reply_to_mode == 'thread',
61                     'auto_delete': not mass_mailing.keep_archives,
62                 })
63         return res