1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class MailingCustomer(models.Model):
""" A model inheriting from mail.thread with a partner field, to test
mass mailing flows involving checking partner email. """
_description = 'Mailing with partner'
_name = 'mailing.test.customer'
_inherit = ['mail.thread']
name = fields.Char()
email_from = fields.Char(compute='_compute_email_from', readonly=False, store=True)
customer_id = fields.Many2one('res.partner', 'Customer', tracking=True)
@api.depends('customer_id')
def _compute_email_from(self):
for mailing in self.filtered(lambda rec: not rec.email_from and rec.customer_id):
mailing.email_from = mailing.customer_id.email
def _message_get_default_recipients(self):
""" Default recipient checks for 'partner_id', here the field is named
'customer_id'. """
default_recipients = super()._message_get_default_recipients()
for record in self:
if record.customer_id:
default_recipients[record.id] = {
'email_cc': False,
'email_to': False,
'partner_ids': record.customer_id.ids,
}
return default_recipients
class MailingSimple(models.Model):
""" Model only inheriting from mail.thread to test base mailing features and
performances. """
_description = 'Simple Mailing'
_name = 'mailing.test.simple'
_inherit = ['mail.thread']
_primary_email = 'email_from'
name = fields.Char()
email_from = fields.Char()
class MailingUTM(models.Model):
""" Model inheriting from mail.thread and utm.mixin for checking utm of mailing
is caught and set on reply """
_description = 'Mailing: UTM enabled to test UTM sync with mailing'
_name = 'mailing.test.utm'
_inherit = ['mail.thread', 'utm.mixin']
name = fields.Char()
class MailingBLacklist(models.Model):
""" Model using blacklist mechanism for mass mailing features. """
_description = 'Mailing Blacklist Enabled'
_name = 'mailing.test.blacklist'
_inherit = ['mail.thread.blacklist']
_order = 'name ASC, id DESC'
_primary_email = 'email_from'
name = fields.Char()
email_from = fields.Char()
customer_id = fields.Many2one('res.partner', 'Customer', tracking=True)
user_id = fields.Many2one('res.users', 'Responsible', tracking=True)
def _message_get_default_recipients(self):
""" Default recipient checks for 'partner_id', here the field is named
'customer_id'. """
default_recipients = super()._message_get_default_recipients()
for record in self:
if record.customer_id:
default_recipients[record.id] = {
'email_cc': False,
'email_to': False,
'partner_ids': record.customer_id.ids,
}
return default_recipients
class MailingOptOut(models.Model):
""" Model using blacklist mechanism and a hijacked opt-out mechanism for
mass mailing features. """
_description = 'Mailing Blacklist / Optout Enabled'
_name = 'mailing.test.optout'
_inherit = ['mail.thread.blacklist']
_primary_email = 'email_from'
name = fields.Char()
email_from = fields.Char()
opt_out = fields.Boolean()
customer_id = fields.Many2one('res.partner', 'Customer', tracking=True)
user_id = fields.Many2one('res.users', 'Responsible', tracking=True)
def _mailing_get_opt_out_list(self, mailing):
res_ids = mailing._get_recipients()
opt_out_contacts = set(self.search([
('id', 'in', res_ids),
('opt_out', '=', True)
]).mapped('email_normalized'))
return opt_out_contacts
def _message_get_default_recipients(self):
""" Default recipient checks for 'partner_id', here the field is named
'customer_id'. """
default_recipients = super()._message_get_default_recipients()
for record in self:
if record.customer_id:
default_recipients[record.id] = {
'email_cc': False,
'email_to': False,
'partner_ids': record.customer_id.ids,
}
return default_recipients
class MailingTestPartner(models.Model):
_description = 'Mailing Model with partner_id'
_name = 'mailing.test.partner'
_inherit = ['mail.thread.blacklist']
_primary_email = 'email_from'
name = fields.Char()
email_from = fields.Char()
partner_id = fields.Many2one('res.partner', 'Customer')
class MailingPerformance(models.Model):
""" A very simple model only inheriting from mail.thread to test pure mass
mailing performances. """
_name = 'mailing.performance'
_description = 'Mailing: base performance'
_inherit = ['mail.thread']
name = fields.Char()
email_from = fields.Char()
class MailingPerformanceBL(models.Model):
""" Model using blacklist mechanism for mass mailing performance. """
_name = 'mailing.performance.blacklist'
_description = 'Mailing: blacklist performance'
_inherit = ['mail.thread.blacklist']
_primary_email = 'email_from' # blacklist field to check
name = fields.Char()
email_from = fields.Char()
user_id = fields.Many2one(
'res.users', 'Responsible',
tracking=True)
container_id = fields.Many2one(
'mail.test.container', 'Meta Container Record',
tracking=True)
|