diff --git a/addons/mass_mailing/__openerp__.py b/addons/mass_mailing/__openerp__.py index 9211a219f5c..3dead242da8 100644 --- a/addons/mass_mailing/__openerp__.py +++ b/addons/mass_mailing/__openerp__.py @@ -43,8 +43,8 @@ professional emails and reuse templates in a few clicks. 'data/mass_mailing_data.xml', 'wizard/mail_compose_message_view.xml', 'wizard/create_template_view.xml', - 'wizard/create_list_view.xml', 'wizard/test_mailing.xml', + 'wizard/mailing_list_confirm.xml', 'views/mass_mailing.xml', 'views/res_config.xml', 'views/res_partner.xml', diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py index 78b1b1598d5..741c734c1c6 100644 --- a/addons/mass_mailing/models/mass_mailing.py +++ b/addons/mass_mailing/models/mass_mailing.py @@ -143,7 +143,7 @@ class MassMailingList(osv.Model): def create(self, cr, uid, values, context=None): new_id = super(MassMailingList, self).create(cr, uid, values, context=context) - if values.get('model') == 'mail.mass_mailing.contact': + if values.get('model') == 'mail.mass_mailing.contact' and (not context or not context.get('no_contact_to_list')): domain = values.get('domain') if domain is None or domain is False: return new_id @@ -175,7 +175,7 @@ class MassMailingList(osv.Model): return False self.pool['mail.mass_mailing'].write(cr, uid, [mass_mailing_id], {'contact_list_ids': [(4, list_id) for list_id in ids]}, context=context) return { - 'name': _('New Mass Mailing'), + 'name': _('Mass Mailing'), 'type': 'ir.actions.act_window', 'view_type': 'form', 'view_mode': 'form', @@ -185,12 +185,9 @@ class MassMailingList(osv.Model): } def _get_domain(self, cr, uid, ids, context=None): - # todo: model-based method + check opt_out field exists domains = {} for contact_list in self.browse(cr, uid, ids, context=context): - if contact_list.model == 'mail.mass_mailing.contact': - domain = [('list_id', '=', contact_list.id)] - elif contact_list.domain is False or contact_list.domain is None: # domain is a string like False or None -> void list + if contact_list.domain is False or contact_list.domain is None: # domain is a string like False or None -> void list domain = [('id', '=', '0')] else: domain = eval(contact_list.domain) @@ -495,6 +492,10 @@ class MassMailing(osv.Model): 'email_from': fields.char('From'), 'reply_to': fields.char('Reply To'), 'mailing_model': fields.selection(_mailing_model, string='Type', required=True), + 'contact_list_choice': fields.selection( + [('existing', 'Use existing lists'), ('new', 'Create a new list')], + string='Contact List Choice', required=True + ), 'contact_list_ids': fields.many2many( 'mail.mass_mailing.list', 'mail_mass_mailing_list_rel', string='Mailing Lists', @@ -579,6 +580,7 @@ class MassMailing(osv.Model): 'date': fields.datetime.now, 'email_from': lambda self, cr, uid, ctx=None: self.pool['mail.message']._get_default_from(cr, uid, context=ctx), 'mailing_model': 'res.partner', + 'contact_list_choice': 'existing', 'contact_ab_pc': 100, } @@ -586,6 +588,18 @@ class MassMailing(osv.Model): # Technical stuff #------------------------------------------------------ + def copy_data(self, cr, uid, id, default=None, context=None): + if default is None: + default = {} + mailing = self.browse(cr, uid, id, context=context) + default.update({ + 'state': 'draft', + 'statistics_ids': [], + 'state': 'draft', + 'name': _('%s (duplicate)') % mailing.name, + }) + return super(MassMailing, self).copy_data(cr, uid, id, default, context=context) + def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False): """ Override read_group to always display all states. """ if groupby and groupby[0] == "state": @@ -635,13 +649,8 @@ class MassMailing(osv.Model): def action_duplicate(self, cr, uid, ids, context=None): copy_id = None - for mailing in self.browse(cr, uid, ids, context=context): - copy_id = self.copy( - cr, uid, mailing.id, default={ - 'statistics_ids': [], - 'state': 'draft', - 'name': _('%s (duplicate)') % mailing.name, - }, context=context) + for mid in ids: + copy_id = self.copy(cr, uid, mid, context=context) if copy_id: return { 'type': 'ir.actions.act_window', @@ -660,15 +669,20 @@ class MassMailing(osv.Model): return self.pool['ir.model.data'].xmlid_to_res_id(cr, uid, 'mass_mailing.action_contact_to_mailing_list') def action_new_list(self, cr, uid, ids, context=None): - wizard = self.browse(cr, uid, ids[0], context=context) - action_id = self._get_model_to_list_action_id(cr, uid, wizard.mailing_model, context=context) - ctx = dict(context, search_default_not_opt_out=True, view_manager_highlight=[action_id], default_mass_mailing_id=ids[0], default_model=wizard.mailing_model) + mailing = self.browse(cr, uid, ids[0], context=context) + action_id = self._get_model_to_list_action_id(cr, uid, mailing.mailing_model, context=context) + ctx = dict(context, + search_default_not_opt_out=True, + view_manager_highlight=[action_id], + default_name=mailing.name, + default_mass_mailing_id=ids[0], + default_model=mailing.mailing_model) return { 'name': _('Choose Recipients'), 'type': 'ir.actions.act_window', 'view_type': 'form', 'view_mode': 'tree,form', - 'res_model': wizard.mailing_model, + 'res_model': mailing.mailing_model, 'context': ctx, } @@ -676,7 +690,7 @@ class MassMailing(osv.Model): mailing = self.browse(cr, uid, ids[0], context=context) domain = self.pool['mail.mass_mailing.list'].get_global_domain(cr, uid, [c.id for c in mailing.contact_list_ids], context=context)[mailing.mailing_model] return { - 'name': _('Mailing Recipients'), + 'name': _('See Recipients'), 'type': 'ir.actions.act_window', 'view_type': 'form', 'view_mode': 'tree,form', diff --git a/addons/mass_mailing/views/mass_mailing.xml b/addons/mass_mailing/views/mass_mailing.xml index 90916d399fe..c9a49a046fb 100644 --- a/addons/mass_mailing/views/mass_mailing.xml +++ b/addons/mass_mailing/views/mass_mailing.xml @@ -74,11 +74,11 @@ +