Files
odoo_source/addons/test_mass_mailing/models/mailing_models.py
T
Thibault Delavallée 786c2c9e3c [IMP] mass_mailing: improve contact order
Use name instead of email, as contact is notably used in sms marketing
application with mainly phone numbers. Better use the name as primary
ordering field. Then use ID to avoid non deterministic behavior.

This requires to fix some tests in 'test_mass_mailing' so that they
use test models instead of existing models. That way they are not
dependent on existing data and existing models definition anymore. An
issue with ordering rose as we modified the ordering of contact model.

Task-2150462 (Mass Mailing: Improve subscription management)

Part-of: odoo/odoo#86084
2023-10-06 06:13:53 +00:00

159 lines
5.5 KiB
Python

# -*- 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)