diff --git a/addons/mail/static/src/models/notification_group/notification_group.js b/addons/mail/static/src/models/notification_group/notification_group.js
index 54cbb8c2036..48bccf5ee23 100644
--- a/addons/mail/static/src/models/notification_group/notification_group.js
+++ b/addons/mail/static/src/models/notification_group/notification_group.js
@@ -115,6 +115,7 @@ function factory(dependencies) {
target: 'current',
res_model: this.res_model,
domain: [['message_has_error', '=', true]],
+ context: { create: false },
},
});
if (this.messaging.device.isMobile) {
diff --git a/addons/mail/views/mail_template_views.xml b/addons/mail/views/mail_template_views.xml
index eee589a4284..2f6e02bb088 100644
--- a/addons/mail/views/mail_template_views.xml
+++ b/addons/mail/views/mail_template_views.xml
@@ -34,9 +34,9 @@
-
+
-
+
@@ -44,7 +44,7 @@
-
+
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index 003bb940514..3d91e4cde93 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -130,8 +130,8 @@ class MailComposer(models.TransientModel):
string='Considers answers as new thread',
help='Manage answers as new incoming emails instead of replies going to the same thread.')
reply_to_mode = fields.Selection([
- ('update', 'Log in the original discussion thread'),
- ('new', 'Redirect to another email address')],
+ ('update', 'Store email and replies in the chatter of each record'),
+ ('new', 'Collect replies on a specific email address')],
string='Replies', compute='_compute_reply_to_mode', inverse='_inverse_reply_to_mode',
help="Original Discussion: Answers go in the original document discussion thread. \n Another Email Address: Answers go to the email address mentioned in the tracking message-id instead of original document discussion thread. \n This has an impact on the generated message-id.")
is_log = fields.Boolean('Log an Internal Note',
diff --git a/addons/mail/wizard/mail_compose_message_views.xml b/addons/mail/wizard/mail_compose_message_views.xml
index 603958d9b29..1771f53bf47 100644
--- a/addons/mail/wizard/mail_compose_message_views.xml
+++ b/addons/mail/wizard/mail_compose_message_views.xml
@@ -6,7 +6,7 @@
mail.compose.message
-
- Resend mail
+ Sending Failures
mail.resend.message
ir.actions.act_window
form
diff --git a/addons/mass_mailing/wizard/mail_compose_message.py b/addons/mass_mailing/wizard/mail_compose_message.py
index 788afa1319c..a17f317ba7a 100644
--- a/addons/mass_mailing/wizard/mail_compose_message.py
+++ b/addons/mass_mailing/wizard/mail_compose_message.py
@@ -9,7 +9,7 @@ class MailComposeMessage(models.TransientModel):
mass_mailing_id = fields.Many2one('mailing.mailing', string='Mass Mailing', ondelete='cascade')
campaign_id = fields.Many2one('utm.campaign', string='Mass Mailing Campaign')
- mass_mailing_name = fields.Char(string='Mass Mailing Name')
+ mass_mailing_name = fields.Char(string='Mass Mailing Name', help='If set, a mass mailing will be created so that you can track its results in the Email Marketing app.')
mailing_list_ids = fields.Many2many('mailing.list', string='Mailing List')
def get_mail_values(self, res_ids):
diff --git a/addons/mass_mailing/wizard/mail_compose_message_views.xml b/addons/mass_mailing/wizard/mail_compose_message_views.xml
index 07aec46f4a5..ffc9bbe06e2 100644
--- a/addons/mass_mailing/wizard/mail_compose_message_views.xml
+++ b/addons/mass_mailing/wizard/mail_compose_message_views.xml
@@ -13,6 +13,34 @@
+
+
+
+ {'invisible': [
+ '|',
+ ('is_log', '=', False),
+ '&',
+ ('mass_mailing_name', '!=', ''),
+ ('mass_mailing_name', '!=', False)
+ ]}
+
+
+
+
+
+ {'invisible': [
+ '|',
+ ('is_log', '=', True),
+ '&',
+ ('mass_mailing_name', '!=', ''),
+ ('mass_mailing_name', '!=', False)
+ ]}
+
+
+
+
+
diff --git a/addons/sms/static/src/models/notification_group/notification_group.js b/addons/sms/static/src/models/notification_group/notification_group.js
index a05a0e84a18..04a5b70055c 100644
--- a/addons/sms/static/src/models/notification_group/notification_group.js
+++ b/addons/sms/static/src/models/notification_group/notification_group.js
@@ -48,6 +48,7 @@ registerInstancePatchModel('mail.notification_group', 'sms/static/src/models/not
target: 'current',
res_model: this.res_model,
domain: [['message_has_sms_error', '=', true]],
+ context: { create: false },
},
});
if (this.messaging.device.isMobile) {
diff --git a/addons/sms/wizard/sms_resend.py b/addons/sms/wizard/sms_resend.py
index 804c3d19ba3..25882a91871 100644
--- a/addons/sms/wizard/sms_resend.py
+++ b/addons/sms/wizard/sms_resend.py
@@ -11,12 +11,12 @@ class SMSRecipient(models.TransientModel):
sms_resend_id = fields.Many2one('sms.resend', required=True)
notification_id = fields.Many2one('mail.notification', required=True, ondelete='cascade')
- resend = fields.Boolean(string="Resend", default=True)
+ resend = fields.Boolean(string='Try Again', default=True)
failure_type = fields.Selection(
- related='notification_id.failure_type', related_sudo=True, readonly=True)
+ related='notification_id.failure_type', string='Error Message', related_sudo=True, readonly=True)
partner_id = fields.Many2one('res.partner', 'Partner', related='notification_id.res_partner_id', readonly=True)
- partner_name = fields.Char('Recipient', readonly='True')
- sms_number = fields.Char('Number')
+ partner_name = fields.Char(string='Recipient Name', readonly='True')
+ sms_number = fields.Char(string='Phone Number')
class SMSResend(models.TransientModel):
@@ -40,7 +40,8 @@ class SMSResend(models.TransientModel):
mail_message_id = fields.Many2one('mail.message', 'Message', readonly=True, required=True)
recipient_ids = fields.One2many('sms.resend.recipient', 'sms_resend_id', string='Recipients')
- has_cancel = fields.Boolean(compute='_compute_has_cancel')
+ can_cancel = fields.Boolean(compute='_compute_can_cancel')
+ can_resend = fields.Boolean(compute='_compute_can_resend')
has_insufficient_credit = fields.Boolean(compute='_compute_has_insufficient_credit')
has_unregistered_account = fields.Boolean(compute='_compute_has_unregistered_account')
@@ -53,8 +54,12 @@ class SMSResend(models.TransientModel):
self.has_insufficient_credit = self.recipient_ids.filtered(lambda p: p.failure_type == 'sms_credit')
@api.depends("recipient_ids.resend")
- def _compute_has_cancel(self):
- self.has_cancel = self.recipient_ids.filtered(lambda p: not p.resend)
+ def _compute_can_cancel(self):
+ self.can_cancel = self.recipient_ids.filtered(lambda p: not p.resend)
+
+ @api.depends('recipient_ids.resend')
+ def _compute_can_resend(self):
+ self.can_resend = any([recipient.resend for recipient in self.recipient_ids])
def _check_access(self):
if not self.mail_message_id or not self.mail_message_id.model or not self.mail_message_id.res_id:
diff --git a/addons/sms/wizard/sms_resend_views.xml b/addons/sms/wizard/sms_resend_views.xml
index f9ce259bbec..3c70c37c4d4 100644
--- a/addons/sms/wizard/sms_resend_views.xml
+++ b/addons/sms/wizard/sms_resend_views.xml
@@ -7,29 +7,30 @@