[IMP] mass_mailing: onboarding

Lots of small usability improvements on the mass_mailing app.
This commit is contained in:
Alexandre Kühn
2018-02-01 13:34:29 +01:00
committed by Alexandre Kühn
parent 126850e9bd
commit 0cd656b5af
10 changed files with 279 additions and 147 deletions
+20 -9
View File
@@ -131,6 +131,10 @@ class MassMailingList(models.Model):
if archive:
(src_lists - self).write({'active': False})
@api.multi
def close_dialog(self):
return {'type': 'ir.actions.act_window_close'}
class MassMailingContact(models.Model):
"""Model of a contact. This model is different from the partner model
@@ -387,10 +391,10 @@ class MassMailing(models.Model):
state = fields.Selection([('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')],
string='Status', required=True, copy=False, default='draft')
color = fields.Integer(string='Color Index')
user_id = fields.Many2one('res.users', string='Mailing Manager', default=lambda self: self.env.user)
# mailing options
reply_to_mode = fields.Selection(
[('thread', 'Followers of leads/applicants'), ('email', 'Specified Email Address')],
string='Reply-To Mode', required=True)
[('thread', 'Recipient Followers'), ('email', 'Specified Email Address')], string='Reply-To Mode', required=True)
reply_to = fields.Char(string='Reply To', help='Preferred Reply-To Address',
default=lambda self: self.env['mail.message']._get_default_from())
# recipients
@@ -514,13 +518,20 @@ class MassMailing(models.Model):
@api.onchange('mailing_model_id', 'contact_list_ids')
def _onchange_model_and_list(self):
if self.mailing_model_name == 'mail.mass_mailing.list':
if self.contact_list_ids:
self.mailing_domain = "[('list_ids', 'in', [%s]), ('opt_out', '=', False)]" % (','.join(str(id) for id in self.contact_list_ids.ids),)
else:
self.mailing_domain = "[(0, '=', 1)]"
elif self.mailing_model_name and 'opt_out' in self.env[self.mailing_model_name]._fields and not self.mailing_domain:
self.mailing_domain = "[('opt_out', '=', False)]"
str_tuples = ""
if self.mailing_model_name:
if self.mailing_model_name == 'mail.mass_mailing.list':
if self.contact_list_ids:
str_tuples += "('list_ids', 'in', {}),".format(','.join(str(id) for id in self.contact_list_ids.ids))
else:
str_tuples += "(0, '=', 1),"
elif self.mailing_model_name == 'res.partner':
str_tuples += "('customer', '=', True),"
elif 'opt_out' in self.env[self.mailing_model_name]._fields and not self.mailing_domain:
str_tuples += "('opt_out', '=', False),"
else:
str_tuples += "(0, '=', 1),"
self.mailing_domain = "[{}]".format(str_tuples)
self.body_html = "on_change_model_and_list"
#------------------------------------------------------
@@ -16,6 +16,9 @@ KanbanRecord.include({
_openRecord: function () {
if (this.modelName === 'mail.mass_mailing.campaign') {
this.$('.oe_mailings').click();
} else if (this.modelName === 'mail.mass_mailing.list' &&
this.$('.o_mailing_list_kanban_boxes a')) {
this.$('.o_mailing_list_kanban_boxes a').first().click();
} else {
this._super.apply(this, arguments);
}
@@ -1,11 +1,22 @@
.o_form_view .o_form_sheet .o_notebook .tab-content .tab-pane .o_mail_body {
// cancel padding of form_sheet
margin-top: -@odoo-sheet-cancel-tpadding;
margin-left: -@odoo-sheet-cancel-hpadding;
margin-right: -@odoo-sheet-cancel-hpadding;
margin-bottom: -@odoo-sheet-cancel-bpadding;
}
.o_mail_theme_selector {
> a {
.o-position-absolute(0, 0, auto, 0);
height: 34px;
height: @odoo-navbar-height;
line-height: 31px;
border-radius: 0;
background-color: @o-we-color-darker;
color: @o-we-color-text-normal;
.o-flex-display();
.o-justify-content(center);
.o-align-items(center);
&:hover, &:focus, &:active {
color: @o-we-color-text-light;
@@ -9,7 +9,11 @@
<field name="mail_mail_id_int"/>
<field name="message_id"/>
<field name="mass_mailing_id"/>
<filter string="Sent" name="filter_sent" domain="[('sent', '!=', False)]"/>
<filter string="Received" name="filter_received" domain="[('sent', '!=', False), ('bounced', '=', False)]"/>
<filter string="Scheduled" name="filter_scheduled" domain="[('scheduled', '!=', False), ('sent', '=', False), ('exception', '=', False)]"/>
<filter string="Failed" name="filter_failed" domain="[('scheduled', '!=', False), ('sent', '=', False), ('exception', '!=', False)]"/>
<separator/>
<filter string="Opened" name="filter_opened" domain="[('opened', '!=', False)]"/>
<filter string="Clicked" name="filter_clicked" domain="[('clicked', '!=', False)]"/>
<filter string="Replied" name="filter_replied" domain="[('replied', '!=', False)]"/>
@@ -29,7 +33,7 @@
<field name="name">mail.mail.statistics.tree</field>
<field name="model">mail.mail.statistics</field>
<field name="arch" type="xml">
<tree string="Mail Statistics">
<tree string="Mail Statistics" create="0">
<field name="recipient"/>
<field name="message_id"/>
<field name="sent"/>
@@ -46,27 +50,35 @@
<field name="name">mail.mail.statistics.form</field>
<field name="model">mail.mail.statistics</field>
<field name="arch" type="xml">
<form string="Mail Statistics">
<group>
<form string="Mail Statistics" create="0">
<div class="oe_form_box_info oe_text_center alert-info" attrs="{'invisible': [('exception', '=', False)]}">
<p><strong>This email could not be sent.</strong></p>
</div>
<sheet>
<group>
<field name="recipient"/>
<field name="mail_mail_id"/>
<field name="mail_mail_id_int"/>
<field name="message_id"/>
<field name="exception"/>
<field name="sent"/>
<field name="opened"/>
<field name="clicked"/>
<field name="replied"/>
<field name="bounced"/>
<group>
<field name="recipient"/>
<field name="mass_mailing_id"/>
<field name="mass_mailing_campaign_id" groups="mass_mailing.group_mass_mailing_campaign"/>
</group>
<group>
<field name="exception" attrs="{'invisible': [('exception', '=', False)]}"/>
<field name="sent"/>
<field name="opened"/>
<field name="clicked"/>
<field name="replied"/>
<field name="bounced"/>
</group>
<group groups="base.group_no_one">
<field name="mail_mail_id_int"/>
<field name="message_id"/>
<field name="model"/>
<field name="res_id"/>
</group>
</group>
<group>
<field name="mass_mailing_id"/>
<field name="mass_mailing_campaign_id"/>
<field name="model"/>
<field name="res_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
@@ -88,7 +100,7 @@
</record>
<record id="action_view_mail_mail_statistics_mailing_list" model="ir.actions.act_window">
<field name="name">EMails Sent</field>
<field name="name">Emails Sent</field>
<field name="res_model">mail.mail.statistics</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph,form,pivot</field>
+188 -102
View File
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Marketing / Mass Mailing -->
<!-- Marketing / Mailing -->
<menuitem name="Email Marketing" id="mass_mailing_menu_root" sequence="60" web_icon="mass_mailing,static/description/icon.png"/>
<menuitem name="Mailings" id="mass_mailing_menu"
parent="mass_mailing_menu_root" sequence="1" groups="mass_mailing.group_mass_mailing_user"/>
<menuitem name="Contacts" id="mass_mailing_contact_menu"
<menuitem name="Mailing Lists" id="mass_mailing_mailing_list_menu"
parent="mass_mailing_menu_root" sequence="2" groups="mass_mailing.group_mass_mailing_user"/>
<!-- Marketing / Configuration -->
<menuitem name="Configuration" id="mass_mailing_configuration"
parent="mass_mailing_menu_root" sequence="100"/>
<!-- MASS MAILING CONTACT -->
<!-- MAILING CONTACT -->
<!-- Custom reports (aka filters) -->
<record id="filter_contact_subscription" model="ir.filters">
@@ -32,7 +32,7 @@
<field name="name">mail.mass_mailing.contact.search</field>
<field name="model">mail.mass_mailing.contact</field>
<field name="arch" type="xml">
<search string="Contacts">
<search string="Mailing List Contacts">
<field name="name" filter_domain="['|','|',('name','ilike',self),('company_name','ilike',self), ('email','ilike',self)]"
string="Name / Email"/>
<field name="tag_ids"/>
@@ -54,7 +54,7 @@
<field name="model">mail.mass_mailing.contact</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Contacts">
<tree string="Mailing List Contacts">
<field name="create_date"/>
<field name="name"/>
<field name="company_name"/>
@@ -112,7 +112,7 @@
<field name="model">mail.mass_mailing.contact</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<form string="Contacts">
<form string="Mailing List Contacts">
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
@@ -153,7 +153,7 @@
<field name="model">mail.mass_mailing.contact</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<pivot string="Contacts" stacked="True">
<pivot string="Mailing List Contacts" stacked="True">
<field name="create_date" type="row"/>
</pivot>
</field>
@@ -164,14 +164,14 @@
<field name="model">mail.mass_mailing.contact</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<graph string="Contacts" stacked="True">
<graph string="Mailing List Contacts" stacked="True">
<field name="create_date" type="row"/>
</graph>
</field>
</record>
<record model="ir.actions.act_window" id="action_view_mass_mailing_contacts">
<field name="name">Contacts</field>
<field name="name">Mailing List Contacts</field>
<field name="res_model">mail.mass_mailing.contact</field>
<field name="view_type">form</field>
<field name="view_mode">tree,kanban,form,graph,pivot</field>
@@ -199,11 +199,11 @@
</field>
</record>
<menuitem name="Contacts" id="menu_email_mass_mailing_contacts"
parent="mass_mailing_contact_menu" sequence="4"
<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"/>
<!-- MASS MAILING LIST -->
<!-- MAILING LIST -->
<record model="ir.ui.view" id="view_mail_mass_mailing_list_search">
<field name="name">mail.mass_mailing.list.search</field>
<field name="model">mail.mass_mailing.list</field>
@@ -233,32 +233,6 @@
</field>
</record>
<record id="view_mail_mass_mailing_list_kanban" model="ir.ui.view">
<field name="name">mail.mass_mailing.list.kanban</field>
<field name="model">mail.mass_mailing.list</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<field name="name"/>
<field name="contact_nbr"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
<div class="o_kanban_record_top mb0">
<div class="o_kanban_record_headings mt4">
<strong class="o_kanban_record_title"><t t-esc="record.name.value"/></strong>
</div>
<span class="badge">
<i class="fa fa-user"/>
<t t-esc="record.contact_nbr.value"/>
</span>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record model="ir.ui.view" id="view_mail_mass_mailing_list_form">
<field name="name">mail.mass_mailing.list.form</field>
<field name="model">mail.mass_mailing.list</field>
@@ -287,33 +261,119 @@
</field>
</record>
<record id="view_mail_mass_mailing_list_form_simplified" model="ir.ui.view">
<field name="name">mail.mass_mailing.list.form.simplified</field>
<field name="model">mail.mass_mailing.list</field>
<field name="arch" type="xml">
<form string="Contact List">
<group>
<group>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name" placeholder="e.g. Consumer Newsletter"/>
</h1>
</div>
</group>
</group>
<footer>
<button string="Create" name="close_dialog" type="object" class="btn-primary"/>
<button string="Discard" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="open_create_mass_mailing_list" model="ir.actions.act_window">
<field name="name">Create a Mass Mailing List</field>
<field name="res_model">mail.mass_mailing.list</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_mail_mass_mailing_list_form_simplified"/>
<field name="target">new</field>
</record>
<record id="view_mail_mass_mailing_list_kanban" model="ir.ui.view">
<field name="name">mail.mass_mailing.list.kanban</field>
<field name="model">mail.mass_mailing.list</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile" on_create="mass_mailing.open_create_mass_mailing_list">
<field name="name"/>
<field name="contact_nbr"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
<div class="o_mass_mailing_kanban_main">
<div class="o_kanban_card_content">
<div class="o_kanban_primary_left">
<div class="o_primary">
<span><t t-esc="record.name.value"/></span>
</div>
</div>
</div>
<div class="o_kanban_card_manage_pane">
<div class="o_kanban_card_manage_section o_dropdown_kanban dropdown">
<a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
<span class="fa fa-ellipsis-v"/>
</a>
<ul class="dropdown-menu" role="menu">
<li t-if="widget.editable">
<a type="edit">Edit</a>
</li>
<li t-if="widget.deletable">
<a type="delete">Delete</a>
</li>
</ul>
</div>
</div>
</div>
<div class="o_mailing_list_kanban_boxes">
<a class="o_project_kanban_box" name="%(action_view_mass_mailing_contacts_from_list)d" type="action">
<div>
<span class="badge">
<i class="fa fa-user"/>
<t t-esc="record.contact_nbr.value"/>
</span>
</div>
</a>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record model="ir.actions.act_window" id="action_view_mass_mailing_lists">
<field name="name">Mailing Lists</field>
<field name="res_model">mail.mass_mailing.list</field>
<field name="view_type">form</field>
<field name="view_mode">tree,kanban,form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new mailing list
</p><p>
Mailing lists allow you to manage customers and
contacts easily and to send to mailings in a single click.
No need of importing your mailing lists, you can easily
send emails to any contact saved in other Odoo apps.
</p>
</field>
</record>
<menuitem name="Mailing Lists" id="menu_email_mass_mailing_lists"
parent="mass_mailing_contact_menu" sequence="3"
parent="mass_mailing_mailing_list_menu" sequence="3"
action="action_view_mass_mailing_lists"/>
<!-- MASS MAILING !-->
<!-- MAILING !-->
<record model="ir.ui.view" id="view_mail_mass_mailing_search">
<field name="name">mail.mass_mailing.search</field>
<field name="model">mail.mass_mailing</field>
<field name="arch" type="xml">
<search string="Mass Mailings">
<search string="Mailings">
<field name="name" string="Mailings"/>
<field name="mass_mailing_campaign_id"/>
<filter string="My Mailings" name="assigned_to_me"
domain="[('user_id', '=', uid)]"
help="Mailings that are assigned to me"/>
<filter name="inactive" string="Archived" domain="[('active','=',False)]"/>
<group expand="0" string="Group By">
<filter string="Status" name="group_state"
@@ -333,7 +393,7 @@
<field name="model">mail.mass_mailing</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Mass Mailings">
<tree string="Mailings">
<field name="name"/>
<field name="sent"/>
<field name="delivered"/>
@@ -349,7 +409,7 @@
<field name="name">mail.mass_mailing.form</field>
<field name="model">mail.mass_mailing</field>
<field name="arch" type="xml">
<form string="Mass Mailing">
<form string="Mailing">
<header style="min-height:31px;">
<button name="action_test_mailing" type="object" class="oe_highlight" string="Test Mailing"/>
<button name="put_in_queue" type="object" attrs="{'invisible': ['|', ('state', 'in', ('in_queue', 'done'))]}" class="oe_highlight" string="Send to All"
@@ -360,26 +420,41 @@
<field name="state" readonly="1" widget="statusbar"/>
</header>
<div class="oe_form_box_info oe_text_center" attrs="{'invisible': [('scheduled', '=', 0)]}">
<p><strong>
<field name="scheduled" class="oe_inline"/>
emails are in queue and will be sent soon.
</strong></p>
<p>
<button class="btn-link"
name="%(action_view_mail_mail_statistics_mailing_list)d"
type="action"
context="{'search_default_filter_scheduled': True}">
<strong>
<field name="scheduled" class="oe_inline"/>
email(s) are in queue and will be sent soon.
</strong>
</button>
</p>
</div>
<div class="oe_form_box_info oe_text_center" attrs="{'invisible': ['|', ('state', '!=', 'done'), ('failed', '=', 0)]}">
<p><strong>
<field name="failed" class="oe_inline"/>
emails could not be sent.
</strong></p>
<div class="oe_form_box_info oe_text_center alert-info" attrs="{'invisible': ['|', ('state', '!=', 'done'), ('failed', '=', 0)]}">
<p>
<button class="btn-link"
name="%(action_view_mail_mail_statistics_mailing_list)d"
type="action"
context="{'search_default_filter_failed': True}">
<strong>
<field name="failed" class="oe_inline"/>
email(s) could not be sent.
</strong>
</button>
</p>
</div>
<div class="oe_form_box_info oe_text_center" attrs="{'invisible': [('state', '!=', 'in_queue')]}">
<p><strong>
This mass mailing is scheduled for
<field name="next_departure" class="oe_inline"/>
This mailing is scheduled for
<field name="next_departure" class="oe_inline"/>.
</strong></p>
</div>
<sheet>
<div class="oe_button_box" name="button_box" attrs="{'invisible': [('state', 'in', ('draft','test'))]}">
<button name="%(action_view_mail_mail_statistics_mailing_list)d" type="action"
context="{'search_default_filter_sent': True}"
icon="fa-envelope-o" class="oe_stat_button"
attrs="{'invisible': [('sent', '=', 0)]}" >
<field name="sent" string="Emails Sent" widget="statinfo"/>
@@ -389,12 +464,12 @@
type="action" class="oe_stat_button">
<field name="received_ratio" string="Received" widget="percentpie"/>
</button>
<button name="%(action_view_mail_mail_statistics_mailing)d"
<button name="%(action_view_mail_mail_statistics_mailing_list)d"
context="{'search_default_filter_opened': True}"
type="action" class="oe_stat_button">
<field name="opened_ratio" string="Opened" widget="percentpie"/>
</button>
<button name="%(action_view_mail_mail_statistics_mailing)d"
<button name="%(action_view_mail_mail_statistics_mailing_list)d"
context="{'search_default_filter_replied': True}"
type="action" class="oe_stat_button">
<field name="replied_ratio" string="Replied" widget="percentpie"/>
@@ -416,7 +491,6 @@
</div>
<group>
<field name="email_from"/>
<label for="name" string="Subject"/>
<div>
<field name="name" nolabel="1"/>
@@ -429,7 +503,8 @@
<field name="mailing_domain" widget="domain"
attrs="{'invisible': [('mailing_model_name', '=', 'mail.mass_mailing.list')]}"
options="{'model': 'mailing_model_real'}"
context="{'search_default_not_opt_out':1}"/>
context="{'search_default_not_opt_out':1}">
</field>
<div attrs="{'invisible': [('mailing_model_name', '!=', 'mail.mass_mailing.list')]}">
<label for="contact_list_ids" string="Select mailing lists:" class="oe_edit_only"/>
<field name="contact_list_ids" widget="many2many_tags"
@@ -439,24 +514,25 @@
</group>
<notebook>
<page string="Mail Body">
<field name="body_html" widget="html_frame" options="{'editor_url': '/mass_mailing/field/email_template'}"/>
<field name="body_html" class="o_mail_body" widget="html_frame" options="{'editor_url': '/mass_mailing/field/email_template'}"/>
</page>
<page string="Options">
<group>
<group string="Mailing">
<field name="email_from"/>
<label for="reply_to"/>
<div>
<field name="reply_to_mode" widget="radio"
attrs="{'invisible': [('mailing_model_name', 'in', ['mail.mass_mailing.contact', 'res.partner', 'mail.mass_mailing.list'])]}"/>
<field name="reply_to"
attrs="{'required': [('reply_to_mode', '=', 'email')], 'invisible': [('reply_to_mode', '=', 'thread')]}"/>
</div>
<label for="attachment_ids"/>
<div>
<field name="attachment_ids" widget="many2many_binary" string="Attach a file" class="oe_inline"/>
</div>
<field name="keep_archives" groups="base.group_no_one"/>
<label for="reply_to"/>
<div>
<field name="reply_to_mode" widget="radio"
attrs="{'invisible': [('mailing_model_name', 'in', ['mail.mass_mailing.contact', 'res.partner'])]}"/>
<field name="reply_to"
attrs="{'required': [('reply_to_mode', '=', 'email')]}"/>
</div>
<field name="schedule_date" />
<field name="keep_archives" groups="base.group_no_one"/>
<field name="create_date" readonly="1" attrs="{'invisible': [('create_date', '=', False)]}"/>
<field name="sent_date" readonly="1" attrs="{'invisible': [('sent_date', '=', False)]}"/>
</group>
@@ -557,98 +633,108 @@
<field name="name">mail.mass_mailing.graph</field>
<field name="model">mail.mass_mailing</field>
<field name="arch" type="xml">
<graph string="Mass Mailing" type="bar">
<graph string="Mailing" type="bar">
<field name="state" type="row"/>
</graph>
</field>
</record>
<record id="action_view_mass_mailings" model="ir.actions.act_window">
<field name="name">Mass Mailings</field>
<field name="name">Mailings</field>
<field name="res_model">mail.mass_mailing</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form,graph</field>
<field name="context">{
'search_default_assigned_to_me': 1,
'default_user_id': uid,
}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new mailing list
Create a new mailing
</p><p>
Mailing lists allow you to manage customers and
contacts easily and to send to mailings in a single click.
No need of importing your mailing lists, you can easily
send emails to any contact saved in other Odoo apps.
</p>
</field>
</record>
<record id="action_view_mass_mailings_from_campaign" model="ir.actions.act_window">
<field name="name">Mass Mailings</field>
<field name="name">Mailings</field>
<field name="res_model">mail.mass_mailing</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{
'search_default_assigned_to_me': 1,
'search_default_mass_mailing_campaign_id': [active_id],
'default_mass_mailing_campaign_id': active_id,
'default_user_id': uid,
}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new mailing list
Create a new mailing
</p><p>
Mailing lists allow you to manage customers and
contacts easily and to send to mailings in a single click.
No need of importing your mailing lists, you can easily
send emails to any contact saved in other Odoo apps.
</p>
</field>
</record>
<record id="action_create_mass_mailings_from_campaign" model="ir.actions.act_window">
<field name="name">Mass Mailings</field>
<field name="name">Mailings</field>
<field name="res_model">mail.mass_mailing</field>
<field name="view_type">form</field>
<field name="view_mode">form,kanban,tree</field>
<field name="context">{
'search_default_assigned_to_me': 1,
'search_default_mass_mailing_campaign_id': [active_id],
'default_mass_mailing_campaign_id': active_id,
'default_user_id': uid,
}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new mailing list
Create a new mailing
</p><p>
Mailing lists allow you to manage customers and
contacts easily and to send to mailings in a single click.
No need of importing your mailing lists, you can easily
send emails to any contact saved in other Odoo apps.
</p>
</field>
</record>
<record id="action_create_ab_mass_mailings_from_campaign" model="ir.actions.act_window">
<field name="name">Mass Mailings</field>
<field name="name">Mailings</field>
<field name="res_model">mail.mass_mailing</field>
<field name="view_type">form</field>
<field name="view_mode">form,kanban,tree</field>
<field name="context">{
'search_default_assigned_to_me': 1,
'search_default_mass_mailing_campaign_id': [active_id],
'default_mass_mailing_campaign_id': active_id,
'default_contact_ab_pc': 10,
'default_user_id': uid,
}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new mailing list
Create a new mailing
</p><p>
Mailing lists allow you to manage customers and
contacts easily and to send to mailings in a single click.
No need of importing your mailing lists, you can easily
send emails to any contact saved in other Odoo apps.
</p>
</field>
</record>
<menuitem name="Mass Mailings" id="menu_email_mass_mailings"
<menuitem name="Mailings" id="menu_email_mass_mailings"
parent="mass_mailing_menu" sequence="2"
action="action_view_mass_mailings"/>
<!-- MASS MAILING CAMPAIGN STAGE !-->
<!-- MAILING CAMPAIGN STAGE !-->
<record model="ir.ui.view" id="view_mail_mass_mailing_stage_search">
<field name="name">mail.mass_mailing.stage.search</field>
<field name="model">mail.mass_mailing.stage</field>
<field name="arch" type="xml">
<search string="Mass Mailings">
<search string="Mailings">
<field name="name"/>
</search>
</field>
@@ -659,14 +745,14 @@
<field name="model">mail.mass_mailing.stage</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Mass Mailings" editable="top">
<tree string="Mailings" editable="top">
<field name="sequence" widget="handle"/>
<field name="name"/>
</tree>
</field>
</record>
<record id="action_view_mass_mailing_stages" model="ir.actions.act_window">
<field name="name">Mass Mailing Stages</field>
<field name="name">Mailing Stages</field>
<field name="res_model">mail.mass_mailing.stage</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
@@ -685,7 +771,7 @@
groups="base.group_no_one,mass_mailing.group_mass_mailing_campaign"
action="action_view_mass_mailing_stages"/>
<!-- MASS MAILING CAMPAIGN TAGS !-->
<!-- MAILING CAMPAIGN TAGS !-->
<record id="mail_mass_mailing_tag_view_form" model="ir.ui.view">
<field name="name">mail.mass_mailing.tag.form</field>
<field name="model">mail.mass_mailing.tag</field>
@@ -711,12 +797,12 @@
<menuitem id="mass_mailing_tag_menu" parent="menu_mass_mailing_configuration" action="mass_mailing_tag_action" sequence="2" groups="base.group_no_one"/>
<!-- MASS MAILING CAMPAIGNS !-->
<!-- MAILING CAMPAIGNS !-->
<record model="ir.ui.view" id="view_mail_mass_mailing_campaign_search">
<field name="name">mail.mass_mailing.campaign.search</field>
<field name="model">mail.mass_mailing.campaign</field>
<field name="arch" type="xml">
<search string="Mass Mailing Campaigns">
<search string="Mailing Campaigns">
<field name="name" string="Campaigns"/>
<field name="tag_ids"/>
<field name="user_id"/>
@@ -735,7 +821,7 @@
<field name="model">mail.mass_mailing.campaign</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Mass Mailing Campaigns">
<tree string="Mailing Campaigns">
<field name="name"/>
<field name="user_id"/>
<field name="stage_id"/>
@@ -748,10 +834,10 @@
<field name="name">mail.mass_mailing.campaign.form</field>
<field name="model">mail.mass_mailing.campaign</field>
<field name="arch" type="xml">
<form string="Mass Mailing Campaign">
<form string="Mailing Campaign">
<header style="min-height:31px;">
<button name="%(action_create_mass_mailings_from_campaign)d" type="action" class="oe_highlight" string="Send new Mass Mailing"/>
<button name="%(action_create_ab_mass_mailings_from_campaign)d" type="action" class="oe_highlight" string="Send new A/B Testing Mass Mailing"/>
<button name="%(action_create_mass_mailings_from_campaign)d" type="action" class="oe_highlight" string="Send new Mailing"/>
<button name="%(action_create_ab_mass_mailings_from_campaign)d" type="action" class="oe_highlight" string="Send new A/B Testing Mailing"/>
<span><field name="stage_id" widget="statusbar" clickable="True"/></span>
</header>
<sheet>
@@ -883,15 +969,15 @@
</record>
<record id="action_view_mass_mailing_campaigns" model="ir.actions.act_window">
<field name="name">Mass Mailing Campaigns</field>
<field name="name">Mailing Campaigns</field>
<field name="res_model">mail.mass_mailing.campaign</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a campaign
Create a new mailing campaign
</p><p>
Create a campaign to structure mass mailing and get analysis from email status.
Create a campaign to structure mailing and get analysis from email status.
</p>
</field>
</record>
+12 -12
View File
@@ -86,7 +86,7 @@
<td width="70%" class="o_mail_logo_container o_mail_h_padding o_mail_v_padding">
&amp;nbsp;
<a t-att-href="(company_id.website) or '#'" style="text-decoration:none;float:none;">
<img border="0" src="/web/image/mass_mailing.s_default_image_logo" style="height:auto;max-width:400px;" alt="Your Logo" />
<img border="0" src="/mass_mailing/static/src/img/theme_basic/s_default_image_logo.png" style="height:auto;max-width:400px;" alt="Your Logo" />
</a>
&amp;nbsp;
</td>
@@ -124,7 +124,7 @@
<td width="20%"/>
<td valign="center" width="60%" class="text-center o_mail_v_padding">
<a t-att-href="(company_id.website) or '#'" style="text-decoration:none;">
<img border="0" src="/web/image/mass_mailing.s_default_image_logo" style="height:auto;max-width:400px;width:auto" alt="Your Logo" />
<img border="0" src="/mass_mailing/static/src/img/theme_basic/s_default_image_logo.png" style="height:auto;max-width:400px;width:auto" alt="Your Logo" />
</a>
</td>
<td width="20%" style="text-align:right"/>
@@ -142,7 +142,7 @@
<tr>
<td width="100%" valign="top" class="o_mail_full_width_padding">
<a href="#">
<img src="/web/image/mass_mailing.s_default_image_block_banner" class="center-block" alt="Your Banner Image" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_banner.jpg" class="center-block" alt="Your Banner Image" />
</a>
</td>
</tr>
@@ -355,7 +355,7 @@
<tr>
<td style="vertical-align:top;width:270px;" class="o_mail_col_mv">
<div class="o_mail_col_container">
<img src="/web/image/mass_mailing.s_default_image_block_two_cols_1" class="center-block" alt="Your Picture" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_two_cols_1.jpg" class="center-block" alt="Your Picture" />
<h4 class="text-center">Column title</h4>
<p class="text-center o_mail_no_margin">
Write one paragraph describing your product,
@@ -370,7 +370,7 @@
<td style="vertical-align:top;width:270px;" class="o_mail_col_mv">
<div class="o_mail_col_container">
<img src="/web/image/mass_mailing.s_default_image_block_two_cols_2" class="center-block" alt="Your Picture" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_two_cols_2.jpg" class="center-block" alt="Your Picture" />
<h4 class="text-center">Column title</h4>
<p class="text-center o_mail_no_margin">
Write one paragraph describing your product,
@@ -397,7 +397,7 @@
<tr>
<td style="vertical-align:top;width:180px;" class="o_mail_col_mv">
<div class="o_mail_col_container">
<img src="/web/image/mass_mailing.s_default_image_block_three_cols_1" class="center-block" alt="Your Picture" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_three_cols_1.jpg" class="center-block" alt="Your Picture" />
<h4 class="text-center">Column Title</h4>
<p class="text-center o_mail_no_margin">
A short description
@@ -410,7 +410,7 @@
<td style="vertical-align:top;width:180px;" class="o_mail_col_mv">
<div class="o_mail_col_container">
<img src="/web/image/mass_mailing.s_default_image_block_three_cols_2" class="center-block" alt="Your Picture" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_three_cols_2.jpg" class="center-block" alt="Your Picture" />
<h4 class="text-center">Column Title</h4>
<p class="text-center o_mail_no_margin">
A short description
@@ -423,7 +423,7 @@
<td style="vertical-align:top;width:180px;" class="o_mail_col_mv">
<div class="o_mail_col_container">
<img src="/web/image/mass_mailing.s_default_image_block_three_cols_3" class="center-block" alt="Your Picture" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_three_cols_3.jpg" class="center-block" alt="Your Picture" />
<h4 class="text-center">Column Title</h4>
<p class="text-center o_mail_no_margin">
A short description
@@ -447,7 +447,7 @@
<tbody>
<tr>
<td style="width:270px;text-align:center;vertical-align:middle" class="o_mail_col_mv o_mail_img_container o_mail_h_padding o_mail_v_padding">
<img src="/web/image/mass_mailing.s_default_image_block_image_text" class="center-block" alt="Your Picture" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_image_text.jpg" class="center-block" alt="Your Picture" />
</td>
<td style="width:270px;vertical-align:middle;text-align:center;" class="o_mail_col_mv o_mail_h_padding o_mail_v_padding">
<h3>Omnichannel sales</h3>
@@ -477,7 +477,7 @@
</div>
</td>
<td style="width:270px;text-align:center;vertical-align:middle" class="o_mail_img_container o_mail_h_padding o_mail_v_padding">
<img src="/web/image/mass_mailing.s_default_image_block_text_image" class="center-block" alt="Your Picture" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_text_image.jpg" class="center-block" alt="Your Picture" />
</td>
</tr>
</tbody>
@@ -493,7 +493,7 @@
<tbody>
<tr>
<td width="100%" align="center" style="text-align:center" class="">
<img src="/web/image/mass_mailing.s_default_image_block_image" class="center-block" alt="Your Picture" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_image.jpg" class="center-block" alt="Your Picture" />
</td>
</tr>
<tr>
@@ -639,7 +639,7 @@
<p class="o_mail_no_margin">ALL DAY</p>
</td>
<td style="width:25%;min-height: 150px;" class="text-center bg-delta o_mail_col_mv">
<img src="/web/image/mass_mailing.s_default_image_block_event" class="center-block" alt="Your Picture" />
<img src="/mass_mailing/static/src/img/theme_basic/s_default_image_block_event.jpg" class="center-block" alt="Your Picture" />
</td>
<td class="o_mail_h_padding o_mail_v_padding o_mail_col_mv" style="min-height: 150px;">
<div style="min-height: 111px">
@@ -15,13 +15,13 @@ var _lt = core._lt;
// are only used if user entered them manually or if got from demo data
var operator_mapping = {
"=": "=",
"!=": _lt("not"),
"!=": _lt("is not ="),
">": ">",
"<": "<",
">=": ">=",
"<=": "<=",
"ilike": _lt("contains"),
"not ilike": _lt("not contains"),
"not ilike": _lt("does not contain"),
"in": _lt("in"),
"not in": _lt("not in"),
+2
View File
@@ -273,6 +273,8 @@
> .o_pie {
position: relative;
display: inline-block;
vertical-align: middle;
margin-right: 10px;
border-radius: 100%;
overflow: hidden;
@@ -52,6 +52,7 @@
height: @pie-dimension - 2 * @pie-ring-width;
border: 1px solid white;
background-color: white;
font-size: 10px;
}
}
}
@@ -72,6 +72,12 @@
@odoo-sheet-vpadding: 24px;
// Needed for having no spacing between sheet and mail body in mass_mailing:
// Different required cancel paddings between web and web_enterprise
@odoo-sheet-cancel-tpadding: 0px;
@odoo-sheet-cancel-hpadding: @odoo-horizontal-padding;
@odoo-sheet-cancel-bpadding: @odoo-horizontal-padding;
@odoo-avatar-size: 90px;
@odoo-statusbar-height: 33px;