diff options
| author | Sanjay Jamod <sja@odoo.com> | 2017-12-13 15:27:50 +0530 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2018-03-15 12:56:26 +0100 |
| commit | 507c1e03a723a67d22fd15c77e555e2f50bd34f6 (patch) | |
| tree | e0efba9ee498d94502737d49b57701a76d2e461d | |
| parent | 7cee389e78b4c5b0dfa83ee83cd4ff8c6ede5713 (diff) | |
[IMP] mass_mailing: allow users to choose a specific outgoing mail server
Purpose of this commit is to allow mass mailing users to select an outgoing
mail sever when performing mass mailing. It includes
* add a field in mass_mailing to select specific outgoing mail server;
it is put in debug mode because it sounds people would not understand
what is its purpose;
* add an option in settings to set a default outgoing mail server;
* give read access to ir.mail_server to mass_mailing users;
This commit is related to task ID 31737.
| -rw-r--r-- | addons/mass_mailing/models/mass_mailing.py | 14 | ||||
| -rw-r--r-- | addons/mass_mailing/models/res_config_settings.py | 10 | ||||
| -rw-r--r-- | addons/mass_mailing/security/ir.model.access.csv | 3 | ||||
| -rw-r--r-- | addons/mass_mailing/views/mass_mailing_views.xml | 1 | ||||
| -rw-r--r-- | addons/mass_mailing/views/res_config_settings_views.xml | 16 |
5 files changed, 42 insertions, 2 deletions
diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py index a714259f7f5..08287d8a4e6 100644 --- a/addons/mass_mailing/models/mass_mailing.py +++ b/addons/mass_mailing/models/mass_mailing.py @@ -6,6 +6,7 @@ import hmac import logging import random import threading +from ast import literal_eval from odoo import api, fields, models, tools, _ from odoo.exceptions import UserError @@ -361,6 +362,15 @@ class MassMailing(models.Model): _rec_name = "source_id" @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: + server_id = literal_eval(server_id) if server_id else False + return self.env['ir.mail_server'].search([('id', '=', server_id)]).id + except ValueError: + return False + + @api.model def default_get(self, fields): res = super(MassMailing, self).default_get(fields) if 'reply_to_mode' in fields and not 'reply_to_mode' in res and res.get('mailing_model_real'): @@ -403,6 +413,9 @@ class MassMailing(models.Model): default=lambda self: self.env.ref('mass_mailing.model_mail_mass_mailing_list').id) mailing_model_name = fields.Char(related='mailing_model_id.model', string='Recipients Model Name', readonly=True, related_sudo=True) mailing_domain = fields.Char(string='Domain', oldname='domain', default=[]) + mail_server_id = fields.Many2one('ir.mail_server', string='Mail Server', + default=_get_default_mail_server_id, + help="Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.") contact_list_ids = fields.Many2many('mail.mass_mailing.list', 'mail_mass_mailing_list_rel', string='Mailing Lists') contact_ab_pc = fields.Integer(string='A/B Testing percentage', @@ -760,6 +773,7 @@ class MassMailing(models.Model): 'mass_mailing_id': mailing.id, 'mailing_list_ids': [(4, l.id) for l in mailing.contact_list_ids], 'no_auto_thread': mailing.reply_to_mode != 'thread', + 'mail_server_id': mailing.mail_server_id.id, } if mailing.reply_to_mode == 'email': composer_values['reply_to'] = mailing.reply_to diff --git a/addons/mass_mailing/models/res_config_settings.py b/addons/mass_mailing/models/res_config_settings.py index d23866c366b..aedcef27d69 100644 --- a/addons/mass_mailing/models/res_config_settings.py +++ b/addons/mass_mailing/models/res_config_settings.py @@ -1,10 +1,18 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models +from odoo import api, fields, models class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' group_mass_mailing_campaign = fields.Boolean(string="Mass Mailing Campaigns", implied_group='mass_mailing.group_mass_mailing_campaign', help="""This is useful if your marketing campaigns are composed of several emails""") + mass_mailing_outgoing_mail_server = fields.Boolean(string="Specific Mail Server", config_parameter='mass_mailing.outgoing_mail_server', + help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.') + mass_mailing_mail_server_id = fields.Many2one('ir.mail_server', string='Mail Server', config_parameter='mass_mailing.mail_server_id') + + @api.onchange('mass_mailing_outgoing_mail_server') + def _onchange_mass_mailing_outgoing_mail_server(self): + if not self.mass_mailing_outgoing_mail_server: + self.mass_mailing_mail_server_id = False diff --git a/addons/mass_mailing/security/ir.model.access.csv b/addons/mass_mailing/security/ir.model.access.csv index 40a182fe6bd..d87aa9dbf41 100644 --- a/addons/mass_mailing/security/ir.model.access.csv +++ b/addons/mass_mailing/security/ir.model.access.csv @@ -10,4 +10,5 @@ access_mass_mailing_system,mail.mass_mailing.system,model_mail_mass_mailing,base access_mail_mail_statistics_user,mail.mail.statistics,model_mail_mail_statistics,base.group_user,1,1,1,1
access_mail_mail_statistics_mass_mailing_user,mail.mail.statistics,model_mail_mail_statistics,mass_mailing.group_mass_mailing_user,1,1,1,1
access_mail_statistics_report,mail.statistics.report,model_mail_statistics_report,mass_mailing.group_mass_mailing_user,1,1,1,1
-access_utm_source,access_utm_source,utm.model_utm_source,mass_mailing.group_mass_mailing_user,1,1,1,0
\ No newline at end of file +access_utm_source,access_utm_source,utm.model_utm_source,mass_mailing.group_mass_mailing_user,1,1,1,0
+access_ir_mail_server,access_ir_mail_server,base.model_ir_mail_server,mass_mailing.group_mass_mailing_user,1,0,0,0
diff --git a/addons/mass_mailing/views/mass_mailing_views.xml b/addons/mass_mailing/views/mass_mailing_views.xml index 95de69ee6e1..586d805bf8b 100644 --- a/addons/mass_mailing/views/mass_mailing_views.xml +++ b/addons/mass_mailing/views/mass_mailing_views.xml @@ -531,6 +531,7 @@ <div> <field name="attachment_ids" widget="many2many_binary" string="Attach a file" class="oe_inline"/> </div> + <field name="mail_server_id" groups="base.group_no_one" options="{'no_create': True, 'no_open': True}"/> <field name="schedule_date" /> <field name="keep_archives" groups="base.group_no_one"/> <field name="create_date" readonly="1" attrs="{'invisible': [('create_date', '=', False)]}"/> diff --git a/addons/mass_mailing/views/res_config_settings_views.xml b/addons/mass_mailing/views/res_config_settings_views.xml index 6412319d20f..a828ae2a734 100644 --- a/addons/mass_mailing/views/res_config_settings_views.xml +++ b/addons/mass_mailing/views/res_config_settings_views.xml @@ -28,6 +28,22 @@ </div> </div> </div> + <div class="col-md-6 o_setting_box col-xs-12"> + <div class="o_setting_left_pane" title="Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails."> + <field name="mass_mailing_outgoing_mail_server"/> + </div> + <div class="o_setting_right_pane"> + <label for="mass_mailing_outgoing_mail_server"/> + <div class="text-muted"> + Use a specific mail server for mailings + </div> + <div class="content-group" attrs="{'invisible': [('mass_mailing_outgoing_mail_server', '=', False)]}"> + <div class="mt16"> + <field name="mass_mailing_mail_server_id" options="{'no_create': True, 'no_open': True}"/> + </div> + </div> + </div> + </div> </div> <h2>Mailing Lists</h2> <div id="mailing_list" class="row mt16 o_settings_container"/> |
