fixup! [IMP] mail_tracking: Failed Messages to 12.0

pull/447/head
Alexandre Díaz 2019-10-31 14:46:08 +01:00
parent 322a3e0437
commit 714983bdae
5 changed files with 123 additions and 3 deletions

View File

@ -233,3 +233,24 @@ class MailMessage(models.Model):
def get_failed_count(self): def get_failed_count(self):
""" Gets the number of failed messages used on discuss mailbox item""" """ Gets the number of failed messages used on discuss mailbox item"""
return self.search_count(self._get_failed_message_domain()) return self.search_count(self._get_failed_message_domain())
@api.model
def set_all_as_reviewed(self):
""" Sets all messages in the given domain as reviewed.
Used by Discuss """
unreviewed_messages = self.search(self._get_failed_message_domain())
unreviewed_messages.write({'mail_tracking_needs_action': False})
ids = unreviewed_messages.ids
self.env['bus.bus'].sendone(
(self._cr.dbname, 'res.partner',
self.env.user.partner_id.id),
{
'type': 'toggle_tracking_status',
'message_ids': ids,
'needs_actions': False,
}
)
return ids

View File

@ -34,7 +34,14 @@ class MailResendMessage(models.TransientModel):
to_send = wizard.partner_ids.filtered(lambda p: p.resend).mapped( to_send = wizard.partner_ids.filtered(lambda p: p.resend).mapped(
"partner_id") "partner_id")
if to_send: if to_send:
# Set as reviewed
wizard.mail_message_id.mail_tracking_needs_action = False wizard.mail_message_id.mail_tracking_needs_action = False
# Reset mail.tracking.email state
tracking_ids = wizard.mail_message_id.mail_tracking_ids\
.filtered(lambda x: x.partner_id in to_send)
tracking_ids.write({'state': False})
# Sen bus notification to update Discuss and
# mail_failed_messages widget
notifications = [ notifications = [
[ [
(self._cr.dbname, 'res.partner', (self._cr.dbname, 'res.partner',

View File

@ -16,6 +16,7 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
var MailManager = require('mail.Manager'); var MailManager = require('mail.Manager');
var Mailbox = require('mail.model.Mailbox'); var Mailbox = require('mail.model.Mailbox');
var core = require('web.core'); var core = require('web.core');
var session = require('web.session');
var QWeb = core.qweb; var QWeb = core.qweb;
var _t = core._t; var _t = core._t;
@ -128,7 +129,7 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
var channelFailed = self.getMailbox('failed'); var channelFailed = self.getMailbox('failed');
channelFailed.invalidateCaches(); channelFailed.invalidateCaches();
} }
self._mailBus.trigger('update_message', message); self._mailBus.trigger('update_message', message, data.type);
} }
}); });
@ -182,6 +183,63 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
return $sidebar; return $sidebar;
}, },
/**
* Overrides to listen click on 'Set all as reviewed' button
*
* @Override
*/
_renderButtons: function () {
this._super.apply(this, arguments);
this.$buttons
.on('click', '.o_mail_discuss_button_set_all_reviewed',
this._onSetAllAsReviewedClicked.bind(this));
},
/**
* Overrides to update 'set all as reviewed' button
*
* @Override
*/
_updateControlPanelButtons: function (thread) {
// Set All Reviewed
if (thread.getID() === 'mailbox_failed') {
this.$buttons
.find('.o_mail_discuss_button_set_all_reviewed')
.removeClass('d-none d-md-inline-block')
.addClass('d-none d-md-inline-block');
} else {
this.$buttons
.find('.o_mail_discuss_button_set_all_reviewed')
.removeClass('d-none d-md-inline-block')
.addClass('d-none');
}
this._super.apply(this, arguments);
},
/**
* Overrides to update 'set all as reviewed' button
*
* @Override
*/
_updateButtonStatus: function (disabled, type) {
if (this._thread.getID() === 'mailbox_failed') {
this.$buttons
.find('.o_mail_discuss_button_set_all_reviewed')
.toggleClass('disabled', disabled);
// Display Rainbowman when all inbox messages are reviewed
// through 'TOGGLE TRACKING STATUS' or marking last failed
// message as reviewed
if (disabled && type === 'toggle_tracking_status') {
this.trigger_up('show_effect', {
message: _t(
"Congratulations, your failed mailbox is empty"),
type: 'rainbow_man',
});
}
}
},
/** /**
* Overrides to update messages in 'failed' mailbox thread * Overrides to update messages in 'failed' mailbox thread
* *
@ -271,6 +329,13 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
context: this.getSession().user_context, context: this.getSession().user_context,
}); });
}, },
/**
* @private
*/
_onSetAllAsReviewedClicked: function () {
this._thread.setAllMessagesAsReviewed();
},
}); });
MailManager.include({ MailManager.include({
@ -302,11 +367,32 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
return [ return [
['mail_tracking_ids.state', 'in', FAILED_STATES], ['mail_tracking_ids.state', 'in', FAILED_STATES],
['mail_tracking_needs_action', '=', true], ['mail_tracking_needs_action', '=', true],
'|',
['partner_ids', 'in', [session.partner_id]],
['author_id', '=', session.partner_id],
]; ];
} }
// Workaround to avoid throw 'Missing domain' exception // Workaround to avoid throw 'Missing domain' exception
return this._super.apply(this, arguments); return this._super.apply(this, arguments);
}, },
/**
* Sets all messages from the mailbox as reviewed. At the moment,
* this method makes only sense for 'Failed'.
*
* @param {Array} domain
* @returns {$.Promise} resolved when all messages have been marked as
* reviewed on the server
*/
setAllMessagesAsReviewed: function () {
if (this._id === 'mailbox_failed' && this.getMailboxCounter() > 0) {
return this._rpc({
model: 'mail.message',
method: 'set_all_as_reviewed',
});
}
return $.when();
},
}); });
}); });

View File

@ -301,8 +301,8 @@ odoo.define('mail_tracking.FailedMessage', function (require) {
this._super.apply(this, arguments); this._super.apply(this, arguments);
this._enabledOptions.displayRetryButton = true; this._enabledOptions.displayRetryButton = true;
this._enabledOptions.displayReviewedButton = true; this._enabledOptions.displayReviewedButton = true;
this._disabledOptions.displayRetryButton = true; this._disabledOptions.displayRetryButton = false;
this._disabledOptions.displayReviewedButton = true; this._disabledOptions.displayReviewedButton = false;
}, },
}); });

View File

@ -25,4 +25,10 @@
</t> </t>
</t> </t>
<t t-extend="mail.discuss.ControlButtons">
<t t-jquery="div" t-operation="append">
<button type="button" class="btn btn-secondary o_mail_discuss_button_set_all_reviewed d-none d-md-inline-block" title="Mark all as reviewed">Mark all as reviewed</button>
</t>
</t>
</templates> </templates>