diff options
| -rw-r--r-- | addons/link_tracker/views/link_tracker_views.xml | 8 | ||||
| -rw-r--r-- | addons/mass_mailing/README.md | 2 | ||||
| -rw-r--r-- | addons/mass_mailing/data/mass_mailing_data.xml | 2 | ||||
| -rw-r--r-- | addons/mass_mailing/models/mailing.py | 11 | ||||
| -rw-r--r-- | addons/mass_mailing/views/link_tracker_views.xml | 8 | ||||
| -rw-r--r-- | addons/mass_mailing/views/mailing_contact_views.xml | 4 | ||||
| -rw-r--r-- | addons/mass_mailing/views/mailing_mailing_views.xml | 110 | ||||
| -rw-r--r-- | addons/mass_mailing/views/utm_campaign_views.xml | 10 | ||||
| -rw-r--r-- | addons/mass_mailing/wizard/mailing_mailing_schedule_date.py | 2 | ||||
| -rw-r--r-- | addons/mass_mailing/wizard/mailing_mailing_schedule_date_views.xml | 2 | ||||
| -rw-r--r-- | addons/mass_mailing_sms/views/mailing_mailing_views.xml | 15 | ||||
| -rw-r--r-- | addons/utm/views/utm_campaign_views.xml | 10 |
12 files changed, 120 insertions, 64 deletions
diff --git a/addons/link_tracker/views/link_tracker_views.xml b/addons/link_tracker/views/link_tracker_views.xml index c6d54738f8a..b1fd90735b7 100644 --- a/addons/link_tracker/views/link_tracker_views.xml +++ b/addons/link_tracker/views/link_tracker_views.xml @@ -84,7 +84,9 @@ <field name="view_id" ref="link_tracker_view_tree"/> <field name="help" type="html"> <p class="o_view_nocontent_smiling_face"> - Create a new link tracker + Create a link tracker + </p><p> + Trackers are used to collect count stat about click on links and generate short URLs. </p> </field> </record> @@ -160,7 +162,9 @@ <field name="view_id" ref="link_tracker.link_tracker_view_tree"/> <field name="help" type="html"> <p class="o_view_nocontent_smiling_face"> - Create a new link tracker + Create a link tracker + </p><p> + Trackers are used to collect count stat about click on links and generate short URLs. </p> </field> <field name="context">{'search_default_campaign_id': active_id}</field> diff --git a/addons/mass_mailing/README.md b/addons/mass_mailing/README.md index 7fab3d285b2..2fcf5c6b0c3 100644 --- a/addons/mass_mailing/README.md +++ b/addons/mass_mailing/README.md @@ -2,7 +2,7 @@ Odoo Mass Mailing ----------------- Easily send mass mailing to your leads, opportunities or customers -with Odoo <a href="https://www.odoo.com/page/mailing#">Mass Mailing</a>. Track +with Odoo <a href="https://www.odoo.com/page/mailing#">Email Marketing</a>. Track marketing campaigns performance to improve conversion rates. Design professional emails and reuse templates in a few clicks. diff --git a/addons/mass_mailing/data/mass_mailing_data.xml b/addons/mass_mailing/data/mass_mailing_data.xml index 1d4bdc2ae3d..5fb229f9971 100644 --- a/addons/mass_mailing/data/mass_mailing_data.xml +++ b/addons/mass_mailing/data/mass_mailing_data.xml @@ -3,7 +3,7 @@ <data noupdate="1"> <!-- Cron that process the mass mailing queue --> <record id="ir_cron_mass_mailing_queue" model="ir.cron"> - <field name="name">Mass Mailing: Process queue</field> + <field name="name">Email Marketing: Process queue</field> <field name="model_id" ref="model_mailing_mailing"/> <field name="state">code</field> <field name="code">model._process_mass_mailing_queue()</field> diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index 8a5c26cb14b..fa2f76edee9 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -39,6 +39,7 @@ class MassMailing(models.Model): A mass mailing is an occurence of sending emails. """ _name = 'mailing.mailing' _description = 'Mass Mailing' + _inherit = [ 'mail.thread', 'mail.activity.mixin'] # number of periods for tracking mail_mail statistics _period_number = 6 _order = 'sent_date DESC' @@ -64,12 +65,12 @@ class MassMailing(models.Model): res['reply_to_mode'] = 'thread' return res - active = fields.Boolean(default=True) + active = fields.Boolean(default=True, tracking=True) subject = fields.Char('Subject', help='Subject of emails to send', required=True, translate=True) - email_from = fields.Char(string='From', required=True, + email_from = fields.Char(string='Send From', required=True, default=lambda self: self.env['mail.message']._get_default_from()) sent_date = fields.Datetime(string='Sent Date', copy=False) - schedule_date = fields.Datetime(string='Schedule in the Future') + schedule_date = fields.Datetime(string='Scheduled for', tracking=True) # don't translate 'body_arch', the translations are only on 'body_html' body_arch = fields.Html(string='Body', translate=False) body_html = fields.Html(string='Body converted to be send by mail', sanitize_attributes=False) @@ -82,9 +83,9 @@ class MassMailing(models.Model): medium_id = fields.Many2one('utm.medium', string='Medium', help="Delivery method: Email") clicks_ratio = fields.Integer(compute="_compute_clicks_ratio", string="Number of Clicks") state = fields.Selection([('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')], - string='Status', required=True, copy=False, default='draft', group_expand='_group_expand_states') + string='Status', required=True, tracking=True, copy=False, default='draft', group_expand='_group_expand_states') color = fields.Integer(string='Color Index') - user_id = fields.Many2one('res.users', string='Responsible', default=lambda self: self.env.user) + user_id = fields.Many2one('res.users', string='Responsible', tracking=True, default=lambda self: self.env.user) # mailing options mailing_type = fields.Selection([('mail', 'Email')], string="Mailing Type", default="mail", required=True) reply_to_mode = fields.Selection( diff --git a/addons/mass_mailing/views/link_tracker_views.xml b/addons/mass_mailing/views/link_tracker_views.xml index 295afdcdd31..7381518f3fb 100644 --- a/addons/mass_mailing/views/link_tracker_views.xml +++ b/addons/mass_mailing/views/link_tracker_views.xml @@ -34,7 +34,9 @@ <field name="view_id" ref="link_tracker.link_tracker_view_tree"/> <field name="help" type="html"> <p class="o_view_nocontent_smiling_face"> - Create a new link tracker + Create a link tracker + </p><p> + Trackers are used to collect count stat about click on links and generate short URLs. </p> </field> <field name="context">{'search_default_mass_mailing_id': active_id}</field> @@ -47,7 +49,9 @@ <field name="view_id" ref="link_tracker.link_tracker_view_tree"/> <field name="help" type="html"> <p class="o_view_nocontent_smiling_face"> - Create a new link tracker + Create a link tracker + </p><p> + Trackers are used to collect count stat about click on links and generate short URLs. </p> </field> <field name="context">{'id="link_tracker_action_mass_mailing"': active_id}</field> diff --git a/addons/mass_mailing/views/mailing_contact_views.xml b/addons/mass_mailing/views/mailing_contact_views.xml index 002ba900e7b..76642b2c196 100644 --- a/addons/mass_mailing/views/mailing_contact_views.xml +++ b/addons/mass_mailing/views/mailing_contact_views.xml @@ -223,9 +223,9 @@ <field name="context">{'search_default_filter_not_email_bl': 1}</field> <field name="help" type="html"> <p class="o_view_nocontent_smiling_face"> - Create a contact in your address book + Create a mailing contact </p><p> - Odoo helps you to easily track all activities related to a customer. + Mailing contacts allow you to separate your marketing audience from your business contact directory. </p> </field> </record> diff --git a/addons/mass_mailing/views/mailing_mailing_views.xml b/addons/mass_mailing/views/mailing_mailing_views.xml index 0eb5f910450..96456cf2afa 100644 --- a/addons/mass_mailing/views/mailing_mailing_views.xml +++ b/addons/mass_mailing/views/mailing_mailing_views.xml @@ -47,7 +47,7 @@ <field name="arch" type="xml"> <form string="Mailing"> <header style="min-height:31px;"> - <button name="action_put_in_queue" type="object" attrs="{'invisible': [('state', 'in', ('in_queue', 'done'))]}" class="oe_highlight" string="Send Now" + <button name="action_put_in_queue" type="object" attrs="{'invisible': [('state', 'in', ('in_queue', 'done'))]}" class="oe_highlight" string="Send" confirm="This will send the email to all recipients. Do you still want to proceed ?"/> <button name="action_schedule" type="object" attrs="{'invisible': [('state', 'in', ('in_queue', 'done'))]}" class="btn-secondary" string="Schedule"/> <button name="action_test" type="object" class="btn-secondary" string="Test"/> @@ -141,80 +141,114 @@ <group> <field name="active" invisible="1"/> <field name="name" required="1" string="Mailing Name"/> - <field name="mailing_type" widget="radio" options="{'horizontal': true}" invisible="1"/> - <field name="subject" string="Subject"/> + <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'))]}"/> <label for="mailing_model_id" string="Recipients"/> <div> - <field name="mailing_model_id" widget="selection" required="1"/> + <div class="row"> + <div class="col-xs-12 col-md-3" > + <field name="mailing_model_id" widget="selection" + attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> + </div> + <div attrs="{'invisible': [('mailing_model_name', '!=', 'mailing.list')]}" class="col-xs-12 col-md-9 pt-1"> + <label for="contact_list_ids" string="Select mailing lists:" class="oe_edit_only"/> + <field name="contact_list_ids" widget="many2many_tags" + placeholder="Select mailing lists..." class="oe_inline" + attrs="{ + 'required':[('mailing_model_name','=','mailing.list')], + 'readonly': [('state', 'in', ('sending', 'done'))] + }"/> + </div> + </div> + <field name="mailing_model_name" invisible="1"/> <field name="mailing_model_real" invisible="1"/> - <field name="mailing_domain" widget="domain" - attrs="{'invisible': [('mailing_model_name', '=', 'mailing.list')]}" - options="{'model': 'mailing_model_real'}"> - </field> - <div attrs="{'invisible': [('mailing_model_name', '!=', 'mailing.list')]}"> - <label for="contact_list_ids" string="Select mailing lists:" class="oe_edit_only"/> - <field name="contact_list_ids" widget="many2many_tags" - placeholder="Select mailing lists..." class="oe_inline"/> - </div> + <field name="mailing_domain" widget="domain" options="{'model': 'mailing_model_real'}" + attrs="{ + 'invisible': [('mailing_model_name', '=', 'mailing.list')], + 'readonly': [('state', 'in', ('sending', 'done'))] + }"> + </field> </div> </group> <notebook> <page string="Mail Body" name="mail_body"> - <field name="body_html" class="oe_read_only" widget="html" options="{ - 'cssReadonly': 'mass_mailing.iframe_css_assets_readonly', - }"/> - <field name="body_arch" class="o_mail_body oe_edit_only" widget="mass_mailing_html" options="{ - 'snippets': 'mass_mailing.email_designer_snippets', - 'cssEdit': 'mass_mailing.iframe_css_assets_edit', - 'inline-field': 'body_html' - }"/> + <div attrs="{'invisible': [('state', 'in', ('sending', 'done'))]}"> + <field name="body_html" class="oe_read_only" widget="html" + options="{'cssReadonly': 'mass_mailing.iframe_css_assets_readonly'}"/> + <field name="body_arch" class="o_mail_body oe_edit_only" widget="mass_mailing_html" + options="{ + 'snippets': 'mass_mailing.email_designer_snippets', + 'cssEdit': 'mass_mailing.iframe_css_assets_edit', + 'inline-field': 'body_html' + }"/> + </div> + <div attrs="{'invisible': [('state', 'not in', ('sending', 'done'))]}"> + <field name="body_html" attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> + </div> </page> - <page string="Options"> + <page string="Settings"> <group> - <group string="Mailing"> + <group> <field name="user_id"/> - <field name="unique_ab_testing" groups="base.group_no_one"/> - <field name="email_from"/> + <field name="unique_ab_testing" groups="base.group_no_one" attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> + <field name="email_from" attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> <label for="reply_to"/> <div name="reply_to_details"> <field name="reply_to_mode" widget="radio" - attrs="{'invisible': [('mailing_model_name', 'in', ['mailing.contact', 'res.partner', 'mailing.list'])]}"/> + attrs="{ + 'invisible': [('mailing_model_name', 'in', ['mailing.contact', 'res.partner', 'mailing.list'])], + 'readonly': [('state', 'in', ('sending', 'done'))] + }"/> <field name="reply_to" - attrs="{'required': [('reply_to_mode', '=', 'email')], 'invisible': [('reply_to_mode', '=', 'thread')]}"/> + attrs="{ + 'required': [('reply_to_mode', '=', 'email')], + 'invisible': [('reply_to_mode', '=', 'thread')], + 'readonly': [('state', 'in', ('sending', 'done'))] + }"/> </div> <label for="attachment_ids"/> <div name="attachment_ids_details"> - <field name="attachment_ids" widget="many2many_binary" string="Attach a file" class="oe_inline"/> + <field name="attachment_ids" widget="many2many_binary" string="Attach a file" class="oe_inline" + attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> </div> - <field name="mail_server_id" groups="base.group_no_one" options="{'no_create': True, 'no_open': True}"/> - <field name="schedule_date" groups='base.group_no_one'/> - <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)]}"/> + <field name="mail_server_id" groups="base.group_no_one" options="{'no_create': True, 'no_open': True}" + attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> + <field name="keep_archives" groups="base.group_no_one" attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> </group> <group string="Marketing" groups="base.group_no_one,mass_mailing.group_mass_mailing_campaign"> <field name="campaign_id" string="Mailing Campaign" - groups="mass_mailing.group_mass_mailing_campaign"/> + groups="mass_mailing.group_mass_mailing_campaign" + attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> <field name="source_id" string="Source" readonly="1" required="False" - groups="base.group_no_one"/> + groups="base.group_no_one" + attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> <field name="medium_id" string="Medium" required="True" - groups="base.group_no_one"/> + groups="base.group_no_one" + attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> <label for="contact_ab_pc" groups="mass_mailing.group_mass_mailing_campaign"/> <div groups="mass_mailing.group_mass_mailing_campaign"> - <field name="contact_ab_pc" class="oe_inline"/> % + <field name="contact_ab_pc" + class="oe_inline" + attrs="{'readonly': [('state', 'in', ('sending', 'done'))]}"/> % </div> </group> </group> </page> </notebook> </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/> + <field name="message_ids" widget="mail_thread"/> + <field name="activity_ids" widget="mail_activity"/> + </div> </form> </field> </record> @@ -223,7 +257,7 @@ <field name="name">mailing.mailing.kanban</field> <field name="model">mailing.mailing</field> <field name="arch" type="xml"> - <kanban default_group_by="state"> + <kanban default_group_by="state" quick_create="false"> <field name='state' readonly="1"/> <field name='email_from' readonly="1"/> <field name='color'/> diff --git a/addons/mass_mailing/views/utm_campaign_views.xml b/addons/mass_mailing/views/utm_campaign_views.xml index 81559afa633..997841ec679 100644 --- a/addons/mass_mailing/views/utm_campaign_views.xml +++ b/addons/mass_mailing/views/utm_campaign_views.xml @@ -7,8 +7,8 @@ <field name="arch" type="xml"> <xpath expr="//sheet" position="before"> <header style="min-height:31px;"> - <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"/> + <button name="%(action_create_mass_mailings_from_campaign)d" type="action" class="oe_highlight" string="Create a mailing"/> + <button name="%(action_create_ab_mass_mailings_from_campaign)d" type="action" class="btn-secondary" string="Create an A/B Testing Mailing"/> <span><field name="stage_id" widget="statusbar" options="{'clickable': '1'}"/></span> </header> </xpath> @@ -100,9 +100,9 @@ <field name="view_mode">kanban,tree,form</field> <field name="help" type="html"> <p class="o_view_nocontent_smiling_face"> - Create a new UTM campaign + Create a mailing campaign </p><p> - Create a campaign to structure mailing and get analysis from email status. + Campaigns are the perfect tool to track results across multiple mailings. </p> </field> <field name="domain">[('is_website', '=', False)]</field> @@ -117,7 +117,7 @@ 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" diff --git a/addons/mass_mailing/wizard/mailing_mailing_schedule_date.py b/addons/mass_mailing/wizard/mailing_mailing_schedule_date.py index e606351f222..1b24087bcdb 100644 --- a/addons/mass_mailing/wizard/mailing_mailing_schedule_date.py +++ b/addons/mass_mailing/wizard/mailing_mailing_schedule_date.py @@ -9,7 +9,7 @@ class MailingMailingScheduleDate(models.TransientModel): _name = 'mailing.mailing.schedule.date' _description = 'Mass Mailing Scheduling' - schedule_date = fields.Datetime(string='Schedule in the Future') + schedule_date = fields.Datetime(string='Scheduled for') mass_mailing_id = fields.Many2one('mailing.mailing', required=True, ondelete='cascade') @api.constrains('schedule_date') diff --git a/addons/mass_mailing/wizard/mailing_mailing_schedule_date_views.xml b/addons/mass_mailing/wizard/mailing_mailing_schedule_date_views.xml index 4840b16039d..4e39c4349c3 100644 --- a/addons/mass_mailing/wizard/mailing_mailing_schedule_date_views.xml +++ b/addons/mass_mailing/wizard/mailing_mailing_schedule_date_views.xml @@ -7,7 +7,7 @@ <form string="Take Future Schedule Date"> <group> <group> - <field name="schedule_date" required="1"/> + <field name="schedule_date" string="Send on" required="1"/> </group> </group> <footer> diff --git a/addons/mass_mailing_sms/views/mailing_mailing_views.xml b/addons/mass_mailing_sms/views/mailing_mailing_views.xml index d4517cf0b1f..964af78e5f6 100644 --- a/addons/mass_mailing_sms/views/mailing_mailing_views.xml +++ b/addons/mass_mailing_sms/views/mailing_mailing_views.xml @@ -69,7 +69,10 @@ </xpath> <!-- Form --> <xpath expr="//field[@name='subject']" position="attributes"> - <attribute name="attrs">{'invisible': [('mailing_type', '!=', 'mail')]}</attribute> + <attribute name="attrs">{ + 'invisible': [('mailing_type', '!=', 'mail')], + 'readonly': [('state', 'in', ('sending', 'done'))]} + </attribute> </xpath> <xpath expr="//page[@name='mail_body']" position="attributes"> <attribute name="attrs">{'invisible': [('mailing_type', '!=', 'mail')]}</attribute> @@ -85,7 +88,10 @@ </xpath> <!-- Option page tweaks --> <xpath expr="//field[@name='email_from']" position="attributes"> - <attribute name="attrs">{'invisible': [('mailing_type', '!=', 'mail')]}</attribute> + <attribute name="attrs">{ + 'invisible': [('mailing_type', '!=', 'mail')], + 'readonly': [('state', 'in', ('sending', 'done'))]} + </attribute> </xpath> <xpath expr="//label[@for='reply_to']" position="attributes"> <attribute name="attrs">{'invisible': [('mailing_type', '!=', 'mail')]}</attribute> @@ -100,7 +106,10 @@ <attribute name="attrs">{'invisible': [('mailing_type', '!=', 'mail')]}</attribute> </xpath> <xpath expr="//field[@name='mail_server_id']" position="attributes"> - <attribute name="attrs">{'invisible': [('mailing_type', '!=', 'mail')]}</attribute> + <attribute name="attrs">{ + 'invisible': [('mailing_type', '!=', 'mail')], + 'readonly': [('state', 'in', ('sending', 'done'))]} + </attribute> </xpath> </field> </record> diff --git a/addons/utm/views/utm_campaign_views.xml b/addons/utm/views/utm_campaign_views.xml index e333d1592f7..4be411b3ef3 100644 --- a/addons/utm/views/utm_campaign_views.xml +++ b/addons/utm/views/utm_campaign_views.xml @@ -6,7 +6,7 @@ <field name="arch" type="xml"> <search string="UTM Campaigns"> <field name="name" string="Campaigns"/> - <field name="tag_ids"/> + <field name="tag_ids" widget="many2many_tags"/> <field name="user_id"/> <group expand="0" string="Group By"> <filter string="Stage" name="group_stage_id" @@ -46,7 +46,7 @@ <field name="name"/> <field name="user_id"/> <field name="stage_id"/> - <field name="tag_ids"/> + <field name="tag_ids" widget="many2many_tags"/> </tree> </field> </record> @@ -120,6 +120,8 @@ <field name="help" type="html"> <p class="o_view_nocontent_smiling_face"> Add a new tag + </p><p> + Use tags to organize campaigns and easily filter them. </p> </field> </record> @@ -153,7 +155,9 @@ <field name="view_mode">tree,form</field> <field name="help" type="html"> <p class="o_view_nocontent_smiling_face"> - Create a new utm stage + Create a stage for your campaigns + </p><p> + Stages allow you to organize your workflow (e.g. : plan, design, in progress, done, …). </p> </field> </record> |
