summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSanjay Jamod <sja@odoo.com>2017-12-13 15:27:50 +0530
committerThibault Delavallée <tde@odoo.com>2018-03-15 12:56:26 +0100
commit507c1e03a723a67d22fd15c77e555e2f50bd34f6 (patch)
treee0efba9ee498d94502737d49b57701a76d2e461d
parent7cee389e78b4c5b0dfa83ee83cd4ff8c6ede5713 (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.py14
-rw-r--r--addons/mass_mailing/models/res_config_settings.py10
-rw-r--r--addons/mass_mailing/security/ir.model.access.csv3
-rw-r--r--addons/mass_mailing/views/mass_mailing_views.xml1
-rw-r--r--addons/mass_mailing/views/res_config_settings_views.xml16
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"/>