[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.
This commit is contained in:
Sanjay Jamod
2018-03-15 12:56:26 +01:00
committed by Thibault Delavallée
parent 7cee389e78
commit 507c1e03a7
5 changed files with 42 additions and 2 deletions
@@ -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
@@ -360,6 +361,15 @@ class MassMailing(models.Model):
_inherits = {'utm.source': 'source_id'}
_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)
@@ -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
@@ -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
@@ -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
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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
10 access_mail_mail_statistics_user mail.mail.statistics model_mail_mail_statistics base.group_user 1 1 1 1
11 access_mail_mail_statistics_mass_mailing_user mail.mail.statistics model_mail_mail_statistics mass_mailing.group_mass_mailing_user 1 1 1 1
12 access_mail_statistics_report mail.statistics.report model_mail_statistics_report mass_mailing.group_mass_mailing_user 1 1 1 1
13 access_utm_source access_utm_source utm.model_utm_source mass_mailing.group_mass_mailing_user 1 1 1 0
14 access_ir_mail_server access_ir_mail_server base.model_ir_mail_server mass_mailing.group_mass_mailing_user 1 0 0 0
@@ -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)]}"/>
@@ -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"/>