From 62591c58f8abded96b5fedcc4d9760550b7bdf18 Mon Sep 17 00:00:00 2001 From: XavierDo Date: Tue, 26 Jun 2018 11:17:21 +0200 Subject: [PATCH] [FIX] mail: add ability to mark failure notification as read The mark as read button was not working for mail failure. More than that, we wanted a functionnality to be able to massively mark mail failure as canceled, especially to be able to clean databases from failure after migration. Task: #1860054 PR: #25622 --- addons/mail/static/img/red_envelope.png | Bin 0 -> 7074 bytes addons/mail/static/src/js/systray.js | 9 +++++ addons/mail/static/src/xml/discuss.xml | 2 +- addons/mail/wizard/mail_resend_message.py | 35 +++++++++++++++++- .../mail/wizard/mail_resend_message_views.xml | 25 +++++++++++++ 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 addons/mail/static/img/red_envelope.png diff --git a/addons/mail/static/img/red_envelope.png b/addons/mail/static/img/red_envelope.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6152ae5de56ba055f7323f9fe060662fac140a GIT binary patch literal 7074 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
- + diff --git a/addons/mail/wizard/mail_resend_message.py b/addons/mail/wizard/mail_resend_message.py index 2f3890755c1..f637b0ca737 100644 --- a/addons/mail/wizard/mail_resend_message.py +++ b/addons/mail/wizard/mail_resend_message.py @@ -70,7 +70,6 @@ class MailResendMessage(models.TransientModel): return {'type': 'ir.actions.act_window_close'} - class PartnerResend(models.TransientModel): _name = 'mail.resend.partner' _description = 'Partner with additionnal information for mail resend' @@ -82,3 +81,37 @@ class PartnerResend(models.TransientModel): resend_wizard_id = fields.Many2one('mail.resend.message', string="Resend wizard") message = fields.Char(string="Help message") + +class MailCancelResend(models.TransientModel): + _name = 'mail.resend.cancel' + _description = 'Dismiss notification for resend by model' + + model = fields.Char(string='Model') + help_message = fields.Char(string='Help message', compute='_compute_help_message') + + @api.multi + @api.depends('model') + def _compute_help_message(self): + for wizard in self: + wizard.help_message = _("Are you sure you want to discard %s mail delivery failures. You won't be able to re-send these mails later!") % (wizard._context.get('unread_counter')) + + @api.multi + def cancel_resend_action(self): + author_id = self.env.user.partner_id.id + for wizard in self: + self._cr.execute(""" + SELECT notif.id, mes.id + FROM mail_message_res_partner_needaction_rel notif + JOIN mail_message mes + ON notif.mail_message_id = mes.id + WHERE notif.email_status IN ('bounce', 'exception') + AND mes.model = %s + AND mes.author_id = %s + """, (wizard.model, author_id)) + res = self._cr.fetchall() + notif_ids = [row[0] for row in res] + messages_ids = list(set([row[1] for row in res])) + if notif_ids: + self.env["mail.notification"].browse(notif_ids).sudo().write({'email_status': 'canceled'}) + self.env["mail.message"].browse(messages_ids)._notify_failure_update() + return {'type': 'ir.actions.act_window_close'} diff --git a/addons/mail/wizard/mail_resend_message_views.xml b/addons/mail/wizard/mail_resend_message_views.xml index 970b56636b5..b0e6f1ade83 100644 --- a/addons/mail/wizard/mail_resend_message_views.xml +++ b/addons/mail/wizard/mail_resend_message_views.xml @@ -29,6 +29,23 @@ + + mail.resend.cancel.form + mail.resend.cancel + + +
+ + +

If you want to re-send them, click Cancel now, then click on the notification and review them one by one by clicking on the red envelope next to each message.

+ +
+
+ +
+
Resend mail mail.resend.message @@ -37,6 +54,14 @@ form new + + Discard mail delivery failures + mail.resend.cancel + ir.actions.act_window + form + form + new +