You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.9 KiB

  1. # -*- coding: utf-8 -*-
  2. # © 2017 Phuc.nt - <phuc.nt@komit-consulting.com>
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. import logging
  5. from email.utils import formataddr
  6. from odoo import api, fields, models
  7. from odoo import tools
  8. class MailMail(models.Model):
  9. _inherit = 'mail.mail'
  10. split_mail_by_recipients = fields.Selection([
  11. ('split', 'One mail for each recipient'),
  12. ('merge', 'One mail for all recipients'),
  13. ('default', 'Project Default')],
  14. string='Split mail by recipient partner',
  15. default='default',
  16. )
  17. @api.multi
  18. def send_get_mail_to(self, partner=None):
  19. self.ensure_one()
  20. email_to = super(MailMail, self).send_get_mail_to(partner=partner)
  21. if self._context.get('merge_mail'):
  22. email_to = [formataddr((p.name, p.email))
  23. for p in self.recipient_ids]
  24. if self.email_to:
  25. email_to += tools.email_split_and_format(self.email_to)
  26. logging.info('Merge email_to and recipients to %s', email_to)
  27. return email_to
  28. @api.multi
  29. def send_get_email_dict(self, partner=None):
  30. self.ensure_one()
  31. res = super(MailMail, self).send_get_email_dict(partner=partner)
  32. default = self.env['ir.config_parameter'].get_param(
  33. 'default_mail_split_by_partner_conf')
  34. # check option merge or split recipients
  35. send_type = self.split_mail_by_recipients
  36. if send_type == 'merge' or send_type == 'default' and \
  37. default == 'merge':
  38. email_to = []
  39. if self.recipient_ids and partner == self.recipient_ids[0] or \
  40. (not self.recipient_ids and self.email_to):
  41. email_to = self.with_context(
  42. {'merge_mail': True}).send_get_mail_to(partner=partner)
  43. res.update({'email_to': email_to})
  44. return res