[MOV] mass_mailing(_sms): split models and views

PURPOSE

Reorganize addon according to guidelines, helping finding and updating code.

SPECIFICATIONS

Move subscription model into its own file, to ease future improvements. Do
the same for its views.

Also move menu entries into a specific file for menus, allowing to easily
understand menu organization in mass mailing.

A duplicated menu about link trackers in SMS is also removed.

Task-2864264 (Mass Mailing Module Reorganization)

Part-of: odoo/odoo#92509
This commit is contained in:
Thibault Delavallée
2022-05-31 16:02:24 +02:00
parent c617923664
commit 4f39a80e76
23 changed files with 224 additions and 216 deletions
+3 -2
View File
@@ -36,16 +36,17 @@
'wizard/mailing_list_merge_views.xml',
'wizard/mailing_mailing_test_views.xml',
'wizard/mailing_mailing_schedule_date_views.xml',
'report/mailing_trace_report_views.xml',
'views/mailing_filter_views.xml',
'views/mailing_mailing_views_menus.xml',
'views/mailing_trace_views.xml',
'views/link_tracker_views.xml',
'views/mailing_contact_views.xml',
'views/mailing_contact_subscription_views.xml',
'views/mailing_list_views.xml',
'views/mailing_mailing_views.xml',
'views/res_config_settings_views.xml',
'views/utm_campaign_views.xml',
'report/mailing_trace_report_views.xml',
'views/mailing_menus.xml',
'views/assets.xml',
'views/mass_mailing_templates_portal.xml',
'views/themes_templates.xml',
+1
View File
@@ -3,6 +3,7 @@
from . import ir_model
from . import link_tracker
from . import mailing_contact_subscription
from . import mailing_contact
from . import mailing_list
from . import mailing_trace
@@ -6,49 +6,6 @@ from odoo.exceptions import UserError
from odoo.osv import expression
class MassMailingContactListRel(models.Model):
""" Intermediate model between mass mailing list and mass mailing contact
Indicates if a contact is opted out for a particular list
"""
_name = 'mailing.contact.subscription'
_description = 'Mass Mailing Subscription Information'
_table = 'mailing_contact_list_rel'
_rec_name = 'contact_id'
_order = 'list_id DESC, contact_id DESC'
contact_id = fields.Many2one('mailing.contact', string='Contact', ondelete='cascade', required=True)
list_id = fields.Many2one('mailing.list', string='Mailing List', ondelete='cascade', required=True)
opt_out = fields.Boolean(
string='Opt Out',
default=False,
help='The contact has chosen not to receive mails anymore from this list')
unsubscription_date = fields.Datetime(string='Unsubscription Date')
message_bounce = fields.Integer(related='contact_id.message_bounce', store=False, readonly=False)
is_blacklisted = fields.Boolean(related='contact_id.is_blacklisted', store=False, readonly=False)
_sql_constraints = [
('unique_contact_list', 'unique (contact_id, list_id)',
'A mailing contact cannot subscribe to the same mailing list multiple times.')
]
@api.model_create_multi
def create(self, vals_list):
now = fields.Datetime.now()
for vals in vals_list:
if 'opt_out' in vals and 'unsubscription_date' not in vals:
vals['unsubscription_date'] = now if vals['opt_out'] else False
if vals.get('unsubscription_date'):
vals['opt_out'] = True
return super().create(vals_list)
def write(self, vals):
if 'opt_out' in vals and 'unsubscription_date' not in vals:
vals['unsubscription_date'] = fields.Datetime.now() if vals['opt_out'] else False
if vals.get('unsubscription_date'):
vals['opt_out'] = True
return super(MassMailingContactListRel, self).write(vals)
class MassMailingContact(models.Model):
"""Model of a contact. This model is different from the partner model
because it holds only some basic information: name, email. The purpose is to
@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class MassMailingContactListRel(models.Model):
""" Intermediate model between mass mailing list and mass mailing contact
Indicates if a contact is opted out for a particular list
"""
_name = 'mailing.contact.subscription'
_description = 'Mass Mailing Subscription Information'
_table = 'mailing_contact_list_rel'
_rec_name = 'contact_id'
_order = 'list_id DESC, contact_id DESC'
contact_id = fields.Many2one('mailing.contact', string='Contact', ondelete='cascade', required=True)
list_id = fields.Many2one('mailing.list', string='Mailing List', ondelete='cascade', required=True)
opt_out = fields.Boolean(
string='Opt Out',
default=False,
help='The contact has chosen not to receive mails anymore from this list')
unsubscription_date = fields.Datetime(string='Unsubscription Date')
message_bounce = fields.Integer(related='contact_id.message_bounce', store=False, readonly=False)
is_blacklisted = fields.Boolean(related='contact_id.is_blacklisted', store=False, readonly=False)
_sql_constraints = [
('unique_contact_list', 'unique (contact_id, list_id)',
'A mailing contact cannot subscribe to the same mailing list multiple times.')
]
@api.model_create_multi
def create(self, vals_list):
now = fields.Datetime.now()
for vals in vals_list:
if 'opt_out' in vals and 'unsubscription_date' not in vals:
vals['unsubscription_date'] = now if vals['opt_out'] else False
if vals.get('unsubscription_date'):
vals['opt_out'] = True
return super().create(vals_list)
def write(self, vals):
if 'opt_out' in vals and 'unsubscription_date' not in vals:
vals['unsubscription_date'] = fields.Datetime.now() if vals['opt_out'] else False
if vals.get('unsubscription_date'):
vals['opt_out'] = True
return super(MassMailingContactListRel, self).write(vals)
@@ -95,8 +95,4 @@
</p>
</field>
</record>
<menuitem name="Reporting" id="menu_mass_mailing_report" sequence="99"
parent="mass_mailing_menu_root"
action="mailing_trace_report_action_mail"/>
</odoo>
@@ -78,12 +78,4 @@
</xpath>
</field>
</record>
<!-- MENU TO HANLDE LINK DATA IN MM -->
<menuitem id="link_tracker_menu_mass_mailing"
name="Link Tracker"
parent="mass_mailing_configuration"
sequence="5"
action="link_tracker.link_tracker_action"/>
</odoo>
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="mailing_contact_subscription_view_form">
<field name="name">mailing.contact.subscription.view.form</field>
<field name="model">mailing.contact.subscription</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<form string="Mailing List Subscription">
<sheet>
<group>
<field name="list_id"/>
<field name="is_blacklisted" invisible="1"/>
<label for="contact_id" class="oe_inline"/>
<div class="o_row o_row_readonly">
<i class="fa fa-ban text-danger" role="img" title="This email is blacklisted for mass mailings"
aria-label="Blacklisted" attrs="{'invisible': [('is_blacklisted', '=', False)]}" groups="base.group_user"></i>
<field name="contact_id"/>
</div>
<field name="unsubscription_date" readonly="1"/>
<field name="opt_out"/>
<field name="message_bounce" readonly="1"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="mailing_contact_subscription_view_tree">
<field name="name">mailing.contact.subscription.view.tree</field>
<field name="model">mailing.contact.subscription</field>
<field name="arch" type="xml">
<tree string="Mailing List Subscriptions">
<field name="contact_id"/>
<field name="unsubscription_date"/>
<field name="opt_out"/>
<field name="message_bounce"/>
<field name="is_blacklisted"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="mailing_contact_subscription_view_search">
<field name="name">mailing.contact.subscription.view.search</field>
<field name="model">mailing.contact.subscription</field>
<field name="arch" type="xml">
<search string="Mailing List Subscriptions">
<field name="contact_id"/>
<field name="opt_out"/>
<field name="list_id"/>
</search>
</field>
</record>
</odoo>
@@ -1,58 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- MAILING CONTACT SUBSCRIPTION -->
<record model="ir.ui.view" id="mailing_contact_subscription_view_form">
<field name="name">mailing.contact.subscription.view.form</field>
<field name="model">mailing.contact.subscription</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<form string="Mailing List Subscription">
<sheet>
<group>
<field name="list_id"/>
<field name="is_blacklisted" invisible="1"/>
<label for="contact_id" class="oe_inline"/>
<div class="o_row o_row_readonly">
<i class="fa fa-ban text-danger" role="img" title="This email is blacklisted for mass mailings"
aria-label="Blacklisted" attrs="{'invisible': [('is_blacklisted', '=', False)]}" groups="base.group_user"></i>
<field name="contact_id"/>
</div>
<field name="unsubscription_date" readonly="1"/>
<field name="opt_out"/>
<field name="message_bounce" readonly="1"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="mailing_contact_subscription_view_tree">
<field name="name">mailing.contact.subscription.view.tree</field>
<field name="model">mailing.contact.subscription</field>
<field name="arch" type="xml">
<tree string="Mailing List Subscriptions">
<field name="contact_id"/>
<field name="unsubscription_date"/>
<field name="opt_out"/>
<field name="message_bounce"/>
<field name="is_blacklisted"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="mailing_contact_subscription_view_search">
<field name="name">mailing.contact.subscription.view.search</field>
<field name="model">mailing.contact.subscription</field>
<field name="arch" type="xml">
<search string="Mailing List Subscriptions">
<field name="contact_id"/>
<field name="opt_out"/>
<field name="list_id"/>
</search>
</field>
</record>
<record id="mailing_contact_view_search" model="ir.ui.view">
<record id="mailing_contact_view_search" model="ir.ui.view">
<field name="name">mailing.contact.view.search</field>
<field name="model">mailing.contact</field>
<field name="arch" type="xml">
@@ -241,8 +189,4 @@
</p>
</field>
</record>
<menuitem name="Mailing List Contacts" id="menu_email_mass_mailing_contacts"
parent="mass_mailing_mailing_list_menu" sequence="4"
action="action_view_mass_mailing_contacts"/>
</odoo>
@@ -293,8 +293,4 @@
</p>
</field>
</record>
<menuitem name="Mailing Lists" id="menu_email_mass_mailing_lists"
parent="mass_mailing_mailing_list_menu" sequence="3"
action="action_view_mass_mailing_lists"/>
</odoo>
@@ -718,10 +718,4 @@
<field name="res_model">mailing.mailing</field>
<field name="view_mode">form</field>
</record>
<menuitem name="Mailings" id="mass_mailing_menu"
parent="mass_mailing_menu_root"
sequence="1"
action="mailing_mailing_action_mail"/>
</odoo>
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Marketing / Mailing -->
<menuitem name="Email Marketing" id="mass_mailing_menu_root" sequence="115" web_icon="mass_mailing,static/description/icon.svg" groups="mass_mailing.group_mass_mailing_user"/>
<menuitem name="Mailing Lists" id="mass_mailing_mailing_list_menu"
parent="mass_mailing_menu_root" sequence="2"/>
<!-- Marketing / Configuration -->
<menuitem name="Configuration" id="mass_mailing_configuration"
parent="mass_mailing_menu_root"
sequence="100"/>
<!-- Configuration / Blacklist -->
<menuitem id="mail_blacklist_mm_menu" name="Blacklisted Email Addresses"
action="mail.mail_blacklist_action"
parent="mass_mailing_configuration"/>
<!-- Configuration / Favorite Filters -->
<menuitem id="mailing_filter_menu_action"
action="mailing_filter_action"
parent="mass_mailing_configuration"/>
<!-- Technical / Mass Mailing -->
<menuitem id="mailing_mailing_menu_technical"
name="Mass Mailing"
sequence="4"
parent="base.menu_custom"/>
</odoo>
+103
View File
@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Marketing / Mailing -->
<menuitem name="Email Marketing"
id="mass_mailing_menu_root"
sequence="115"
web_icon="mass_mailing,static/description/icon.svg"
groups="mass_mailing.group_mass_mailing_user"/>
<!-- Mailings -->
<menuitem name="Mailings"
id="mass_mailing_menu"
parent="mass_mailing_menu_root"
sequence="1"
action="mailing_mailing_action_mail"/>
<!-- Mailing lists -->
<menuitem name="Mailing Lists"
id="mass_mailing_mailing_list_menu"
parent="mass_mailing_menu_root"
sequence="2"/>
<menuitem name="Mailing Lists"
id="menu_email_mass_mailing_lists"
parent="mass_mailing_mailing_list_menu"
sequence="1"
action="action_view_mass_mailing_lists"/>
<menuitem name="Mailing List Contacts"
id="menu_email_mass_mailing_contacts"
parent="mass_mailing_mailing_list_menu"
sequence="2"
action="action_view_mass_mailing_contacts"/>
<!-- Campaigns -->
<menuitem name="Campaigns"
id="menu_email_campaigns"
parent="mass_mailing_menu_root"
sequence="3"
action="action_view_utm_campaigns"
groups="mass_mailing.group_mass_mailing_campaign"/>
<!-- Reporting -->
<menuitem name="Reporting"
id="menu_mass_mailing_report"
sequence="90"
parent="mass_mailing_menu_root"
action="mailing_trace_report_action_mail"/>
<!-- Configuration -->
<menuitem name="Configuration"
id="mass_mailing_configuration"
parent="mass_mailing_menu_root"
sequence="100"/>
<!-- Configuration / Settings -->
<menuitem name="Settings"
id="menu_mass_mailing_global_settings"
parent="mass_mailing_configuration"
sequence="0"
action="action_mass_mailing_configuration"
groups="base.group_system"/>
<!-- Configuration / Campaign stages -->
<menuitem name="Campaign Stages"
id="menu_view_mass_mailing_stages"
parent="mass_mailing_configuration"
sequence="1"
groups="mass_mailing.group_mass_mailing_campaign"
action="utm.action_view_utm_stage"/>
<!-- Configuration / Utm Tags -->
<menuitem id="mass_mailing_tag_menu"
parent="mass_mailing_configuration"
action="utm.action_view_utm_tag"
sequence="2"
groups="mass_mailing.group_mass_mailing_campaign"/>
<!-- Configuration / Link trackers -->
<menuitem id="link_tracker_menu_mass_mailing"
name="Link Tracker"
parent="mass_mailing_configuration"
sequence="10"
action="link_tracker.link_tracker_action"/>
<!-- Configuration / Blacklist -->
<menuitem id="mail_blacklist_mm_menu"
name="Blacklisted Email Addresses"
action="mail.mail_blacklist_action"
parent="mass_mailing_configuration"
sequence="20"/>
<!-- Configuration / Favorite Filters -->
<menuitem id="mailing_filter_menu_action"
action="mailing_filter_action"
parent="mass_mailing_configuration"
sequence="30"/>
<!-- Technical / Mass Mailing -->
<menuitem id="mailing_mailing_menu_technical"
name="Mass Mailing"
sequence="4"
parent="base.menu_custom"/>
<menuitem id="menu_email_statistics"
name="Mailing Traces"
parent="mass_mailing.mailing_mailing_menu_technical"
sequence="2"
action="mailing_trace_action"/>
</odoo>
@@ -140,10 +140,4 @@
</p>
</field>
</record>
<!-- Add in Technical/Email -->
<menuitem id="menu_email_statistics"
name="Mailing Traces"
parent="mass_mailing.mailing_mailing_menu_technical" sequence="2"
action="mailing_trace_action"/>
</odoo>
@@ -78,7 +78,4 @@
<field name="target">inline</field>
<field name="context">{'module' : 'mass_mailing', 'bin_size': False}</field>
</record>
<menuitem id="menu_mass_mailing_global_settings" name="Settings"
parent="mass_mailing_configuration" sequence="0" action="action_mass_mailing_configuration" groups="base.group_system"/>
</odoo>
@@ -111,20 +111,4 @@
</field>
<field name="domain">[('is_auto_campaign', '=', False)]</field>
</record>
<menuitem name="Campaigns" id="menu_email_campaigns"
parent="mass_mailing_menu_root" sequence="5"
action="action_view_utm_campaigns"
groups="mass_mailing.group_mass_mailing_campaign"/>
<menuitem name="Campaign Stages" id="menu_view_mass_mailing_stages"
parent="mass_mailing_configuration" sequence="1"
groups="mass_mailing.group_mass_mailing_campaign"
action="utm.action_view_utm_stage"/>
<menuitem id="mass_mailing_tag_menu"
parent="mass_mailing_configuration"
action="utm.action_view_utm_tag"
sequence="2"
groups="mass_mailing.group_mass_mailing_campaign"/>
</odoo>
+2 -3
View File
@@ -15,15 +15,14 @@
'data': [
'data/utm_data.xml',
'security/ir.model.access.csv',
'views/mailing_sms_menus.xml',
'report/mailing_trace_report_views.xml',
'views/mailing_list_views.xml',
'views/mailing_contact_views.xml',
'views/mailing_trace_views.xml',
'views/mailing_mailing_views.xml',
'views/link_tracker_views.xml',
'views/mass_mailing_sms_templates_portal.xml',
'views/utm_campaign_views.xml',
'report/mailing_trace_report_views.xml',
'views/mailing_sms_menus.xml',
'wizard/sms_composer_views.xml',
'wizard/mailing_sms_test_views.xml',
],
@@ -83,9 +83,4 @@
<field name="act_window_id" ref="mailing_trace_report_action_sms"/>
<field name="view_id" ref="mailing_trace_report_sms_view_tree"/>
</record>
<!-- SMS Marketing / Reporting -->
<record id="mass_mailing_sms_menu_reporting" model="ir.ui.menu">
<field name="action" ref="mailing_trace_report_action_sms"/>
</record>
</odoo>
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<menuitem id="link_tracker_menu"
name="Link Tracker"
parent="mass_mailing_sms_menu_configuration"
sequence="2"
action="link_tracker.link_tracker_action"/>
</odoo>
@@ -91,10 +91,4 @@
</p>
</field>
</record>
<!-- SMS Marketing / Contacts Lists / Contacts Lists -->
<record id="mass_mailing_sms.mailing_contact_menu_sms" model="ir.ui.menu">
<field name="action" ref="mailing_contact_action_sms"/>
</record>
</odoo>
@@ -42,9 +42,4 @@
</p>
</field>
</record>
<!-- SMS Marketing / Contacts Lists / Contacts Lists -->
<record id="mass_mailing_sms.mailing_list_menu_sms" model="ir.ui.menu">
<field name="action" ref="mailing_list_action_sms"/>
</record>
</odoo>
@@ -281,9 +281,4 @@
<field name="act_window_id" ref="mailing_mailing_action_sms"/>
</record>
<!-- SMS Marketing / SMS Marketing -->
<record id="mass_mailing_sms_menu_mass_sms" model="ir.ui.menu">
<field name="action" ref="mailing_mailing_action_sms"/>
</record>
</data></odoo>
@@ -10,6 +10,7 @@
<!-- SMS Marketing / SMS Marketing -->
<menuitem id="mass_mailing_sms_menu_mass_sms"
name="SMS Marketing"
action="mailing_mailing_action_sms"
parent="mass_mailing_sms_menu_root"
sequence="1"
groups="mass_mailing.group_mass_mailing_user"/>
@@ -23,19 +24,30 @@
<!-- SMS Marketing / Contacts Lists / Contacts Lists -->
<menuitem id="mailing_list_menu_sms"
name="Mailing Lists"
action="mailing_list_action_sms"
parent="mass_mailing_sms_menu_contacts"
sequence="1"
groups="mass_mailing.group_mass_mailing_user"/>
<!-- SMS Marketing / Contacts Lists / Contacts -->
<!-- SMS Marketing / Contacts Lists / Contacts -->
<menuitem id="mailing_contact_menu_sms"
name="Mailing List Contacts"
action="mailing_contact_action_sms"
parent="mass_mailing_sms_menu_contacts"
sequence="2"
groups="mass_mailing.group_mass_mailing_user"/>
<!-- SMS Markrting / Campaigns -->
<menuitem id="menu_email_campaigns"
name="Campaigns"
parent="mass_mailing_sms_menu_root"
sequence="5"
action="mass_mailing.action_view_utm_campaigns"
groups="mass_mailing.group_mass_mailing_campaign"/>
<!-- SMS Marketing / Reporting -->
<menuitem id="mass_mailing_sms_menu_reporting"
name="Reporting"
action="mailing_trace_report_action_sms"
parent="mass_mailing_sms_menu_root"
sequence="80"
groups="mass_mailing.group_mass_mailing_user"/>
@@ -55,7 +67,7 @@
groups="mass_mailing.group_mass_mailing_user"/>
<!-- SMS Marketing / Configuration / Link Tracker -->
<menuitem id="link_tracker_menu"
name="Link Tracker Blacklist"
name="Link Tracker"
parent="mass_mailing_sms_menu_configuration"
sequence="2"
action="link_tracker.link_tracker_action"
@@ -58,9 +58,4 @@
</xpath>
</field>
</record>
<menuitem name="Campaigns" id="menu_email_campaigns"
parent="mass_mailing_sms_menu_root" sequence="5"
action="mass_mailing.action_view_utm_campaigns"
groups="mass_mailing.group_mass_mailing_campaign"/>
</odoo>