diff options
| author | Jérémy Hennecart <jeh@odoo.com> | 2020-03-23 08:19:51 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-05-29 09:48:40 +0000 |
| commit | c15f9efed009dd2168fd8296ad573e70e4bbbe52 (patch) | |
| tree | e3216e1a52cb63888c0b1c1fc778f1473f33b1f1 /addons | |
| parent | ad828f40424192337017a899566d71992381b574 (diff) | |
[IMP] mass_mailing: add email marketing tour
PURPOSE
Improve the Email Marketing tour and onboarding to create a "wow effect" when
users test the app.
SPECIFICATIONS
Create a tour for mass_mailing to let user visit Odoo Email Marketing through
a simple mailing creation flow.
This require the following functional changes
* by default, if user chooses to contact mailing lists and there is a single
mailing list available, add it as default value for chosen list;
* create a master mailing list data containing the admin user so that he can
easily follow the tour and test the mailing application;
LINKS
Task ID 2194876
Community PR odoo/odoo#48259
Upgrade PR odoo/upgrade#983
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/mass_mailing/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/mass_mailing/data/mass_mailing_data.xml | 8 | ||||
| -rw-r--r-- | addons/mass_mailing/data/mass_mailing_demo.xml | 15 | ||||
| -rw-r--r-- | addons/mass_mailing/models/mailing.py | 13 | ||||
| -rw-r--r-- | addons/mass_mailing/static/src/js/tours/mass_mailing_tour.js | 87 | ||||
| -rw-r--r-- | addons/mass_mailing/static/src/xml/mass_mailing.xml | 2 | ||||
| -rw-r--r-- | addons/mass_mailing/views/assets.xml | 6 | ||||
| -rw-r--r-- | addons/mass_mailing/views/mailing_mailing_views.xml | 2 | ||||
| -rw-r--r-- | addons/test_mass_mailing/tests/test_performance.py | 4 |
9 files changed, 122 insertions, 16 deletions
diff --git a/addons/mass_mailing/__manifest__.py b/addons/mass_mailing/__manifest__.py index 73ed0cc919d..9cb082042d6 100644 --- a/addons/mass_mailing/__manifest__.py +++ b/addons/mass_mailing/__manifest__.py @@ -17,6 +17,7 @@ 'web_editor', 'web_kanban_gauge', 'social_media', + 'web_tour', ], 'data': [ 'security/mass_mailing_security.xml', diff --git a/addons/mass_mailing/data/mass_mailing_data.xml b/addons/mass_mailing/data/mass_mailing_data.xml index 5fb229f9971..95d6efc0fde 100644 --- a/addons/mass_mailing/data/mass_mailing_data.xml +++ b/addons/mass_mailing/data/mass_mailing_data.xml @@ -13,5 +13,13 @@ <field name="numbercall">-1</field> <field eval="False" name="doall" /> </record> + <record id="mailing_list_data" model="mailing.list"> + <field name="name">Newsletter</field> + </record> + <record id="mass_mailing_contact_0" model="mailing.contact"> + <field name="name" model="res.users" eval="obj().env.ref('base.user_admin').name"/> + <field name="email" model="res.users" eval="obj().env.ref('base.user_admin').email"/> + <field name="list_ids" eval="[(6,0,[ref('mass_mailing.mailing_list_data')])]"/> + </record> </data> </odoo> diff --git a/addons/mass_mailing/data/mass_mailing_demo.xml b/addons/mass_mailing/data/mass_mailing_demo.xml index bb4a942bbff..34e72a7418b 100644 --- a/addons/mass_mailing/data/mass_mailing_demo.xml +++ b/addons/mass_mailing/data/mass_mailing_demo.xml @@ -7,26 +7,21 @@ <field name="name">SampleDoc.doc</field> </record> - <!-- Create mailing lists --> - <record id="mass_mail_list_2" model="mailing.list"> - <field name="name">Imported Contacts</field> - </record> - <!-- Create Contacts --> <record id="mass_mail_contact_1" model="mailing.contact"> <field name="name">Aristide Antario</field> <field name="email">aa@example.com</field> - <field name="list_ids" eval="[(6,0,[ref('mass_mailing.mass_mail_list_2')])]"/> + <field name="list_ids" eval="[(6,0,[ref('mass_mailing.mailing_list_data')])]"/> </record> <record id="mass_mail_contact_2" model="mailing.contact"> <field name="name">Beverly Bridge</field> <field name="email">bb@example.com</field> - <field name="list_ids" eval="[(6,0,[ref('mass_mailing.mass_mail_list_2')])]"/> + <field name="list_ids" eval="[(6,0,[ref('mass_mailing.mailing_list_data')])]"/> </record> <record id="mass_mail_contact_3" model="mailing.contact"> <field name="name">Carol Cartridge</field> <field name="email">cc@example.com</field> - <field name="list_ids" eval="[(6,0,[ref('mass_mailing.mass_mail_list_2')])]"/> + <field name="list_ids" eval="[(6,0,[ref('mass_mailing.mailing_list_data')])]"/> </record> <record id="mass_mail_contact_4" model="mailing.contact"> <field name="name">David Dawson</field> @@ -35,12 +30,12 @@ <record id="mass_mail_contact_5" model="mailing.contact"> <field name="name">Elsa Ericson</field> <field name="email">ee@example.com</field> - <field name="list_ids" eval="[(6,0,[ref('mass_mailing.mass_mail_list_2')])]"/> + <field name="list_ids" eval="[(6,0,[ref('mass_mailing.mailing_list_data')])]"/> </record> <!-- Create Opt-out Records --> <record id="mass_mail_contact_list_rel_1" model="mailing.contact.subscription"> - <field name="list_id" ref="mass_mailing.mass_mail_list_2"/> + <field name="list_id" ref="mass_mailing.mailing_list_data"/> <field name="contact_id" ref="mass_mailing.mass_mail_contact_4"/> <field name="opt_out">True</field> </record> diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index 38814270ae1..7b5b5e65954 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -9,10 +9,9 @@ import random import re import threading from ast import literal_eval -from base64 import b64encode from datetime import datetime -from odoo import api, fields, models, tools, _, SUPERUSER_ID +from odoo import api, fields, models, tools, _ from odoo.exceptions import UserError from odoo.osv import expression @@ -45,6 +44,16 @@ class MassMailing(models.Model): _rec_name = "subject" @api.model + def default_get(self, fields): + vals = super(MassMailing, self).default_get(fields) + if 'contact_list_ids' in fields 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: + mailing_list = self.env['mailing.list'].search([], limit=2) + if len(mailing_list) == 1: + vals['contact_list_ids'] = [(6, 0, [mailing_list.id])] + return vals + + @api.model def _get_default_mail_server_id(self): server_id = self.env['ir.config_parameter'].sudo().get_param('mass_mailing.mail_server_id') try: diff --git a/addons/mass_mailing/static/src/js/tours/mass_mailing_tour.js b/addons/mass_mailing/static/src/js/tours/mass_mailing_tour.js new file mode 100644 index 00000000000..82d875e6839 --- /dev/null +++ b/addons/mass_mailing/static/src/js/tours/mass_mailing_tour.js @@ -0,0 +1,87 @@ +odoo.define('mass_mailing.mass_mailing_tour', function (require) { + "use strict"; + + var core = require('web.core'); + var _t = core._t; + var tour = require('web_tour.tour'); + var now = moment(); + + tour.register('mass_mailing_tour', { + url: '/web', + rainbowManMessage: _t('Congratulations, I love your first mailing. :)'), + }, [tour.stepUtils.showAppsMenuItem(), { + trigger: '.o_app[data-menu-xmlid="mass_mailing.mass_mailing_menu_root"]', + content: _t("Let's try the Email Marketing app."), + width: 210, + position: 'bottom', + edition: 'enterprise', + }, { + trigger: '.o_app[data-menu-xmlid="mass_mailing.mass_mailing_menu_root"]', + content: _t("Let's try the Email Marketing app."), + edition: 'community', + }, { + trigger: '.o-kanban-button-new', + content: _t("Start by creating your first <b>Mailing</b>."), + position: 'bottom', + }, { + trigger: 'input[name="subject"]', + content: _t('Pick the <b>email subject</b>.'), + position: 'right', + run: 'text ' + now.format("MMMM") + " Newsletter", + }, { + trigger: 'div[name="contact_list_ids"] > .o_input_dropdown > input[type="text"]', + run: 'click', + auto: true, + }, { + trigger: 'li.ui-menu-item', + run: 'click', + auto: true, + }, { + trigger: 'div[name="body_arch"] iframe #newsletter', + content: _t('Choose this <b>theme</b>.'), + position: 'left', + edition: 'enterprise', + run: 'click', + }, { + trigger: 'div[name="body_arch"] iframe #default', + content: _t('Choose this <b>theme</b>.'), + position: 'right', + edition: 'community', + run: 'click', + }, { + trigger: 'div[name="body_arch"] iframe div.o_mail_block_paragraph', + content: _t('Click on this paragraph to edit it.'), + position: 'top', + edition: 'enterprise', + run: 'click', + }, { + trigger: 'div[name="body_arch"] iframe div.o_mail_block_title_text', + content: _t('Click on this paragraph to edit it.'), + position: 'top', + edition: 'community', + run: 'click', + }, { + trigger: 'button[name="action_test"]', + content: _t("Test this mailing by sending a copy to yourself."), + position: 'bottom', + }, { + trigger: 'button[name="send_mail_test"]', + content: _t("Check the email address and click send."), + position: 'bottom', + }, { + trigger: 'button[name="action_put_in_queue"]', + content: _t("Ready for take-off!"), + position: 'bottom', + }, { + trigger: '.btn-primary:contains("Ok")', + content: _t("Don't worry, the mailing contact we created is an internal user."), + position: 'bottom', + run: "click", + }, { + trigger: '.o_back_button', + content: _t("By using the <b>Breadcrumb</b>, you can navigate back to the overview."), + position: 'bottom', + run: 'click', + }] + ); +}); diff --git a/addons/mass_mailing/static/src/xml/mass_mailing.xml b/addons/mass_mailing/static/src/xml/mass_mailing.xml index 266d7931ec5..b4a3bfce26b 100644 --- a/addons/mass_mailing/static/src/xml/mass_mailing.xml +++ b/addons/mass_mailing/static/src/xml/mass_mailing.xml @@ -6,7 +6,7 @@ </a> <div class="dropdown-menu" role="menu"> <t t-foreach="themes" t-as="theme"> - <a role="menuitem" href="#" class="dropdown-item"> + <a t-att-id="theme.name" role="menuitem" href="#" class="dropdown-item"> <div class="o_thumb small" t-attf-style="background-image: url(#{theme.img}_small.png)"/> <div class="o_thumb large" t-attf-style="background-image: url(#{theme.img}_large.png)"/> <div class="o_thumb logo" t-attf-style="background-image: url(#{theme.img}_logo.png)"/> diff --git a/addons/mass_mailing/views/assets.xml b/addons/mass_mailing/views/assets.xml index ef99898703d..a1f644b04e7 100644 --- a/addons/mass_mailing/views/assets.xml +++ b/addons/mass_mailing/views/assets.xml @@ -38,6 +38,12 @@ <link rel="stylesheet" type="text/scss" href="/mass_mailing/static/src/css/basic_theme_readonly.css"/> </template> + <template id="assets_common" name="Mass Mailing Assets Common" inherit_id="web.assets_common"> + <xpath expr="//script[last()]" position="after"> + <script type="text/javscript" src="/mass_mailing/static/src/js/tours/mass_mailing_tour.js"/> + </xpath> + </template> + <template id="qunit_suite" inherit_id="web.qunit_suite_tests"> <xpath expr="." position="inside"> <script type="text/javascript"> diff --git a/addons/mass_mailing/views/mailing_mailing_views.xml b/addons/mass_mailing/views/mailing_mailing_views.xml index 032a8192c30..b2302f4edc2 100644 --- a/addons/mass_mailing/views/mailing_mailing_views.xml +++ b/addons/mass_mailing/views/mailing_mailing_views.xml @@ -156,7 +156,7 @@ <field name="active" invisible="1"/> <field name="mailing_type" widget="radio" options="{'horizontal': true}" invisible="1" attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> - <field name="subject" string="Subject" attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}" widget="char_emojis"/> + <field name="subject" string="Subject" attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}" widget="char_emojis" placeholder="e.g. New Sale on all T-shirts"/> <label for="mailing_model_id" string="Recipients"/> <div name="mailing_model_id_container"> <div class="row"> diff --git a/addons/test_mass_mailing/tests/test_performance.py b/addons/test_mass_mailing/tests/test_performance.py index d106247ad73..b6d784f1723 100644 --- a/addons/test_mass_mailing/tests/test_performance.py +++ b/addons/test_mass_mailing/tests/test_performance.py @@ -51,7 +51,7 @@ class TestMassMailPerformance(TestMassMailPerformanceBase): }) # runbot needs +50 compared to local - with self.assertQueryCount(__system__=1913, marketing=1914): + with self.assertQueryCount(__system__=1914, marketing=1915): mailing.action_send_mail() self.assertEqual(mailing.sent, 50) @@ -91,7 +91,7 @@ class TestMassMailBlPerformance(TestMassMailPerformanceBase): }) # runbot needs +62 compared to local - with self.assertQueryCount(__system__=2240, marketing=2241): + with self.assertQueryCount(__system__=2241, marketing=2242): mailing.action_send_mail() self.assertEqual(mailing.sent, 50) |
