social/mass_mailing_partner/wizard/partner_mail_list_wizard.py
Jairo Llopis 6c9bb91c02 [FIX] mass_mailing_partner: Several things:
* Exclude opt_out.

  Now opted-out records will not be counted in the "Mailing lists" smart button
  in the partner form.

* Avoid duplicate error.

  By indicating the exact `partner_id` and ensuring no contacts associated to it are found, you avoid possible duplication errors when several partners share the same name or email.
2022-01-01 16:22:46 +01:00

43 lines
1.6 KiB
Python

# -*- coding: utf-8 -*-
# © 2015 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# © 2015 Antonio Espinosa <antonioea@antiun.com>
# © 2015 Javier Iniesta <javieria@antiun.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import models, api, fields, _
from openerp.exceptions import Warning as UserError
class PartnerMailListWizard(models.TransientModel):
_name = "partner.mail.list.wizard"
_description = "Create contact mailing list"
mail_list_id = fields.Many2one(comodel_name="mail.mass_mailing.list",
string="Mailing List")
partner_ids = fields.Many2many(
comodel_name="res.partner", relation="mail_list_wizard_partner",
default=lambda self: self.env.context.get("active_ids"))
@api.multi
def add_to_mail_list(self):
contact_obj = self.env['mail.mass_mailing.contact']
for partner in self.partner_ids:
if not partner.email:
raise UserError(_("Partner '%s' has no email.") % partner.name)
criteria = [
'|',
('email', '=', partner.email),
('partner_id', '=', partner.id),
('list_id', '=', self.mail_list_id.id),
]
contact_test = contact_obj.search(criteria)
if contact_test:
continue
contact_vals = {
'partner_id': partner.id,
'email': partner.email,
'name': partner.name,
'list_id': self.mail_list_id.id
}
contact_obj.create(contact_vals)