[IMP] mass_mailing: add helper field when targeting mailing lists
Currently there are several checks on mailed model directly in code due to mailing list specific behavior. In order to be easier to manipulate and a bit less low leve, a computed field is introduced for that purpose. Indeed there are some behavior changes when the mailing runs on mailing lists instead of directly on records. There are notably some changes in display (choose mailing lists but mail contact is the real contact model), and in subscription page (directly unsubscribe from mailing lists). Task-2710804 (Mail: Clean MailThread API) Prepares Task-2150462 (Mass Mailing: Unsubscribe flow refactoring) Part-of: odoo/odoo#106568
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
{
|
||||
'name': 'Email Marketing',
|
||||
'summary': 'Design, send and track emails',
|
||||
'version': '2.5',
|
||||
'version': '2.6',
|
||||
'sequence': 60,
|
||||
'website': 'https://www.odoo.com/app/email-marketing',
|
||||
'category': 'Marketing/Email Marketing',
|
||||
|
||||
@@ -53,7 +53,7 @@ class MassMailing(models.Model):
|
||||
})
|
||||
|
||||
if 'contact_list_ids' in fields_list and not vals.get('contact_list_ids') and vals.get('mailing_model_id'):
|
||||
if vals.get('mailing_model_id') == self.env['ir.model']._get('mailing.list').id:
|
||||
if vals.get('mailing_model_id') == self.env['ir.model']._get_id('mailing.list'):
|
||||
mailing_list = self.env['mailing.list'].search([], limit=2)
|
||||
if len(mailing_list) == 1:
|
||||
vals['contact_list_ids'] = [(6, 0, [mailing_list.id])]
|
||||
@@ -154,6 +154,9 @@ class MassMailing(models.Model):
|
||||
mailing_model_name = fields.Char(
|
||||
string='Recipients Model Name',
|
||||
related='mailing_model_id.model', readonly=True, related_sudo=True)
|
||||
mailing_on_mailing_list = fields.Boolean(
|
||||
string='Based on Mailing Lists',
|
||||
compute='_compute_mailing_on_mailing_list')
|
||||
mailing_domain = fields.Char(
|
||||
string='Domain',
|
||||
compute='_compute_mailing_domain', readonly=False, store=True)
|
||||
@@ -383,6 +386,12 @@ class MassMailing(models.Model):
|
||||
for mailing in self:
|
||||
mailing.mailing_model_real = 'mailing.contact' if mailing.mailing_model_id.model == 'mailing.list' else mailing.mailing_model_id.model
|
||||
|
||||
@api.depends('mailing_model_id')
|
||||
def _compute_mailing_on_mailing_list(self):
|
||||
mailing_list_model_id = self.env['ir.model']._get('mailing.list')
|
||||
self.mailing_on_mailing_list = False
|
||||
self.filtered(lambda m: m.mailing_model_id == mailing_list_model_id).mailing_on_mailing_list = True
|
||||
|
||||
@api.depends('mailing_model_id', 'contact_list_ids', 'mailing_type', 'mailing_filter_id')
|
||||
def _compute_mailing_domain(self):
|
||||
for mailing in self:
|
||||
|
||||
@@ -194,14 +194,14 @@
|
||||
<field name="mailing_model_id" options="{'no_open': True, 'no_create': True}"
|
||||
attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/>
|
||||
</div>
|
||||
<div attrs="{'invisible': [('mailing_model_name', '!=', 'mailing.list')]}" class="o_mass_mailing_contact_list_ids pt-1">
|
||||
<div attrs="{'invisible': [('mailing_on_mailing_list', '=', False)]}" class="o_mass_mailing_contact_list_ids pt-1">
|
||||
<label for="contact_list_ids" string="Select mailing lists:" class="oe_edit_only"/>
|
||||
<div class="d-inline-flex flex-row align-items-center">
|
||||
<field name="contact_list_ids" widget="many2many_tags"
|
||||
placeholder="Select mailing lists..." class="oe_inline mb-0"
|
||||
context="{'form_view_ref': 'mass_mailing.mailing_list_view_form_simplified'}"
|
||||
attrs="{
|
||||
'required':[('mailing_model_name','=','mailing.list')],
|
||||
'required':[('mailing_on_mailing_list', '=', True)],
|
||||
'readonly': [('state', 'in', ('sending', 'done'))]
|
||||
}"/>
|
||||
<button icon="fa-user-plus" type="object" class="btn btn-secondary py-0 px-1 ms-1"
|
||||
@@ -209,7 +209,7 @@
|
||||
name="action_view_mailing_contacts" title="Add Mailing Contacts"/>
|
||||
</div>
|
||||
</div>
|
||||
<div attrs="{'invisible': [('mailing_model_name', '=', 'mailing.list')]}" class="o_td_label">
|
||||
<div attrs="{'invisible': [('mailing_on_mailing_list', '=', True)]}" class="o_td_label">
|
||||
<!-- We don't want to display label in edit mode, unless mailing is in sending or done state (where filter will be readonly) -->
|
||||
<label for="mailing_filter_id" string="Filter" class="oe_read_only me-4"
|
||||
attrs="{'invisible': ['|', ('state', 'in', ('sending', 'done')), ('mailing_filter_id', '=', False)]}"/>
|
||||
@@ -225,8 +225,9 @@
|
||||
</div>
|
||||
|
||||
<field name="mailing_model_name" invisible="1"/>
|
||||
<field name="mailing_on_mailing_list" invisible="1"/>
|
||||
<field name="mailing_model_real" invisible="1"/>
|
||||
<div attrs="{'invisible': [('mailing_model_name', '=', 'mailing.list')]}">
|
||||
<div attrs="{'invisible': [('mailing_on_mailing_list', '=', True)]}">
|
||||
<field name="mailing_domain" widget="domain" options="{'model': 'mailing_model_real'}"
|
||||
attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/>
|
||||
</div>
|
||||
@@ -483,7 +484,7 @@
|
||||
<field name='failed'/>
|
||||
<field name='total'/>
|
||||
<field name='mailing_model_id'/>
|
||||
<field name='mailing_model_name'/>
|
||||
<field name='mailing_on_mailing_list'/>
|
||||
<field name='sent_date'/>
|
||||
<field name='schedule_date'/>
|
||||
<field name='next_departure'/>
|
||||
@@ -536,8 +537,8 @@
|
||||
<div>
|
||||
<span attrs="{'invisible': [('sent_date', '=', False)]}" class="me-1"><b><field name="delivered"/> / <field name="expected"/></b> Delivered to</span>
|
||||
<span attrs="{'invisible': [('sent_date', '!=', False)]}" class="me-1"><b><field name='total'/></b></span>
|
||||
<field name='mailing_model_id' attrs="{'invisible': [('mailing_model_name','=','mailing.list')]}"/>
|
||||
<span attrs="{'invisible': [('mailing_model_name','!=','mailing.list')]}">Mailing Contact</span>
|
||||
<field name='mailing_model_id' attrs="{'invisible': [('mailing_on_mailing_list', '=', True)]}"/>
|
||||
<span attrs="{'invisible': [('mailing_on_mailing_list', '=', False)]}">Mailing Contact</span>
|
||||
</div>
|
||||
<div attrs="{'invisible': [('sent_date', '=', False)]}" class="d-flex justify-content-between">
|
||||
<div name="stat_opened">
|
||||
@@ -567,8 +568,8 @@
|
||||
<span attrs="{'invisible': ['|', '|', ('sent_date', '!=', False), ('schedule_date', '!=', False), ('state', '=', 'in_queue')]}"
|
||||
class="clearfix">
|
||||
<b><field name='total' class="me-1"/></b>
|
||||
<field name='mailing_model_id' attrs="{'invisible': [('mailing_model_name','=','mailing.list')]}"/>
|
||||
<span attrs="{'invisible': [('mailing_model_name','!=','mailing.list')]}">Mailing Contact</span>
|
||||
<field name='mailing_model_id' attrs="{'invisible': [('mailing_on_mailing_list', '=', True)]}"/>
|
||||
<span attrs="{'invisible': [('mailing_on_mailing_list', '=', False)]}">Mailing Contact</span>
|
||||
</span>
|
||||
<span attrs="{'invisible': ['|', '|', ('schedule_date', '!=', False), ('state', '!=', 'in_queue'), ('next_departure', '=', False)]}"
|
||||
t-attf-title="Scheduled on #{record.next_departure.value}" class="d-inline-flex">
|
||||
|
||||
Reference in New Issue
Block a user