diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index 2011ac6c9167e19410144508835ae0d710263f5b..99690cea60bcb1fdd9213161bc317738943e9206 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -13,6 +13,7 @@ from base64 import b64encode from odoo import api, fields, models, tools, _, SUPERUSER_ID from odoo.exceptions import UserError +from odoo.osv import expression from odoo.tools.safe_eval import safe_eval _logger = logging.getLogger(__name__) @@ -193,19 +194,27 @@ class MassMailing(models.Model): else: mass_mailing.next_departure = cron_time - @api.onchange('mailing_model_id', 'contact_list_ids') + @api.onchange('mailing_model_name', 'contact_list_ids') def _onchange_model_and_list(self): - mailing_domain = [] + mailing_domain = literal_eval(self.mailing_domain) if self.mailing_domain else [] if self.mailing_model_name: - if self.mailing_model_name == 'mailing.list': - if self.contact_list_ids: - mailing_domain.append(('list_ids', 'in', self.contact_list_ids.ids)) - else: - mailing_domain.append((0, '=', 1)) - elif 'opt_out' in self.env[self.mailing_model_name]._fields and not self.mailing_domain: - mailing_domain.append(('opt_out', '=', False)) + if mailing_domain: + try: + self.env[self.mailing_model_real].search(mailing_domain, limit=1) + except: + mailing_domain = [] + if not mailing_domain: + if self.mailing_model_name == 'mailing.list': + if self.contact_list_ids: + mailing_domain = [('list_ids', 'in', self.contact_list_ids.ids)] + else: + mailing_domain = [(0, '=', 1)] + elif self.mailing_model_name == 'res.partner': + mailing_domain = [('customer', '=', True)] + elif 'opt_out' in self.env[self.mailing_model_name]._fields and not self.mailing_domain: + mailing_domain = [('opt_out', '=', False)] else: - mailing_domain.append((0, '=', 1)) + mailing_domain = [(0, '=', 1)] self.mailing_domain = repr(mailing_domain) @api.onchange('subject')