diff --git a/mail_tracking/demo/demo.xml b/mail_tracking/demo/demo.xml
index e90d45d..e26ae1d 100644
--- a/mail_tracking/demo/demo.xml
+++ b/mail_tracking/demo/demo.xml
@@ -1,4 +1,4 @@
-
+
@@ -8,7 +8,9 @@
comment
- acc@testmail.com,wood.corner26@example.com,toni.rhodes11@example.com
+ acc@testmail.com,wood.corner26@example.com,toni.rhodes11@example.com
1
This is a message with CC
]]>
wood.corner26@example.com
@@ -24,7 +26,7 @@
demo@yourcompany.example.com
wood.corner26@example.com
sent
-
+
@@ -48,7 +50,7 @@
demo@yourcompany.example.com
wood.corner26@example.com
error
-
+
@@ -72,7 +74,7 @@
demo@yourcompany.example.com
jackson.group82@example.com
error
-
+
@@ -96,7 +98,7 @@
demo@yourcompany.example.com
admin@example.com
error
-
+
diff --git a/mail_tracking/security/mail_tracking_email_security.xml b/mail_tracking/security/mail_tracking_email_security.xml
index 306851f..0793f84 100644
--- a/mail_tracking/security/mail_tracking_email_security.xml
+++ b/mail_tracking/security/mail_tracking_email_security.xml
@@ -1,16 +1,21 @@
-
+
- mail_tracking_email: portal/public: read access on my email trackings
-
+ mail_tracking_email: portal/public: read access on my email trackings
+
[('partner_id', '=', user.partner_id.id)]
-
-
-
-
+
+
+
+
diff --git a/mail_tracking/static/src/css/failed_message.scss b/mail_tracking/static/src/css/failed_message.scss
index e9216e0..7bd1be3 100644
--- a/mail_tracking/static/src/css/failed_message.scss
+++ b/mail_tracking/static/src/css/failed_message.scss
@@ -31,7 +31,7 @@
}
i.fa-caret-down:before {
- content: '\f0da';
+ content: "\f0da";
}
}
}
@@ -52,7 +52,7 @@
}
.o_thread_typing_notification_free_space {
- flex-grow: 1,
+ flex-grow: 1;
}
.o_thread_typing_notification_bar {
@@ -60,7 +60,7 @@
background-color: rgba($white, 0.75);
padding: 5px;
text-align: center;
- color: gray('600');
+ color: gray("600");
&.o_thread_order_asc {
@include o-position-sticky($bottom: 0px);
@@ -83,7 +83,7 @@
margin-top: 0px;
margin-bottom: 15px;
}
- border-bottom: 1px solid gray('400');
+ border-bottom: 1px solid gray("400");
text-align: center;
.o_thread_date {
@@ -116,8 +116,8 @@
margin-bottom: 0px;
&.o_mail_not_discussion {
- background-color: rgba(gray('300'), 0.5);
- border-bottom: 1px solid gray('400');
+ background-color: rgba(gray("300"), 0.5);
+ border-bottom: 1px solid gray("400");
}
.o_thread_message_sidebar {
@@ -155,7 +155,8 @@
}
}
- &:hover, &.o_thread_selected_message {
+ &:hover,
+ &.o_thread_selected_message {
.o_thread_message_side_date {
opacity: $o-mail-thread-side-date-opacity;
}
@@ -182,8 +183,6 @@
text-align: justify;
}
-
-
.o_mail_subject {
font-style: italic;
}
@@ -193,7 +192,8 @@
color: gray;
}
- [summary~=o_mail_notification] { // name conflicts with channel notifications, but is odoo notification buttons to hide in chatter if present
+ [summary~="o_mail_notification"] {
+ // name conflicts with channel notifications, but is odoo notification buttons to hide in chatter if present
display: none;
}
@@ -224,7 +224,10 @@
}
}
- .o_thread_message_star, .o_thread_message_needaction, .o_thread_message_reply, .o_thread_message_email {
+ .o_thread_message_star,
+ .o_thread_message_needaction,
+ .o_thread_message_reply,
+ .o_thread_message_email {
padding: 4px;
}
@@ -232,14 +235,16 @@
&.o_thread_message_email_ready {
color: grey;
}
- &.o_thread_message_email_exception, &.o_thread_message_email_bounce {
+ &.o_thread_message_email_exception,
+ &.o_thread_message_email_bounce {
color: red;
opacity: 1;
cursor: pointer;
}
}
- .o_attachments_list, .o_attachments_previews {
+ .o_attachments_list,
+ .o_attachments_previews {
&:last-child {
margin-bottom: $grid-gutter-width;
}
@@ -299,7 +304,7 @@
.o_activity_info {
vertical-align: baseline;
padding: 4px 6px;
- background: theme-color('light');
+ background: theme-color("light");
border-radius: 2px 2px 0 0;
@include o-hover-opacity(1, 1);
diff --git a/mail_tracking/static/src/js/failed_message/discuss.js b/mail_tracking/static/src/js/failed_message/discuss.js
index 6deb131..adf4214 100644
--- a/mail_tracking/static/src/js/failed_message/discuss.js
+++ b/mail_tracking/static/src/js/failed_message/discuss.js
@@ -1,6 +1,6 @@
/* Copyright 2019 Alexandre Díaz
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). */
-odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
+odoo.define("mail_tracking.FailedMessageDiscuss", function(require) {
"use strict";
// To be considered:
@@ -9,45 +9,40 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
// - A mailbox is a type of thread that is displayed on top of
// the discuss menu, has a counter, etc...
- var MailManagerNotif = require('mail.Manager.Notification');
- var AbstractMessage = require('mail.model.AbstractMessage');
- var Message = require('mail.model.Message');
- var Discuss = require('mail.Discuss');
- var MailManager = require('mail.Manager');
- var Mailbox = require('mail.model.Mailbox');
- var core = require('web.core');
- var session = require('web.session');
+ var MailManagerNotif = require("mail.Manager.Notification");
+ var AbstractMessage = require("mail.model.AbstractMessage");
+ var Message = require("mail.model.Message");
+ var Discuss = require("mail.Discuss");
+ var MailManager = require("mail.Manager");
+ var Mailbox = require("mail.model.Mailbox");
+ var core = require("web.core");
+ var session = require("web.session");
var QWeb = core.qweb;
var _t = core._t;
/* The states to consider a message as failed message */
- var FAILED_STATES = [
- 'error', 'rejected', 'spam', 'bounced', 'soft-bounced',
- ];
-
+ var FAILED_STATES = ["error", "rejected", "spam", "bounced", "soft-bounced"];
AbstractMessage.include({
-
/**
* Abstract declaration to know if a message is included in the
* failed mailbox. By default it should be false.
*
* @returns {Boolean}
*/
- isFailed: function () {
+ isFailed: function() {
return false;
},
});
Message.include({
-
/**
* Overrides to store information from server
*
* @override
*/
- init: function (parent, data) {
+ init: function(parent, data) {
this._isFailedMessage = data.is_failed_message;
return this._super.apply(this, arguments);
},
@@ -58,8 +53,8 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- isFailed: function () {
- return _.contains(this._threadIDs, 'mailbox_failed');
+ isFailed: function() {
+ return _.contains(this._threadIDs, "mailbox_failed");
},
/**
@@ -67,11 +62,11 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @param {Boolean} failed
*/
- setFailed: function (failed) {
+ setFailed: function(failed) {
if (failed) {
- this._addThread('mailbox_failed');
+ this._addThread("mailbox_failed");
} else {
- this.removeThread('mailbox_failed');
+ this.removeThread("mailbox_failed");
}
},
@@ -80,21 +75,20 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- _processMailboxes: function () {
+ _processMailboxes: function() {
this.setFailed(this._isFailedMessage);
return this._super.apply(this, arguments);
},
});
MailManagerNotif.include({
-
/**
* Overrides to handle changes in the 'mail_tracking_needs_action' flag
*
* @override
*/
- _handlePartnerNotification: function (data) {
- if (data.type === 'toggle_tracking_status') {
+ _handlePartnerNotification: function(data) {
+ if (data.type === "toggle_tracking_status") {
this._handleChangeTrackingNeedsActionNotification(data);
} else {
// Workaround to avoid call '_handlePartnerChannelNotification'
@@ -113,24 +107,23 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
* @private
* @param {Object} data
*/
- _handleChangeTrackingNeedsActionNotification: function (data) {
+ _handleChangeTrackingNeedsActionNotification: function(data) {
var self = this;
- var failed = this.getMailbox('failed');
- _.each(data.message_ids, function (messageID) {
- var message = _.find(self._messages, function (msg) {
+ var failed = this.getMailbox("failed");
+ _.each(data.message_ids, function(messageID) {
+ var message = _.find(self._messages, function(msg) {
return msg.getID() === messageID;
});
if (message) {
message.setFailed(data.needs_actions);
if (message.isFailed() === false) {
- self._removeMessageFromThread(
- 'mailbox_failed', message);
+ self._removeMessageFromThread("mailbox_failed", message);
} else {
self._addMessageToThreads(message, []);
- var channelFailed = self.getMailbox('failed');
+ var channelFailed = self.getMailbox("failed");
channelFailed.invalidateCaches();
}
- self._mailBus.trigger('update_message', message, data.type);
+ self._mailBus.trigger("update_message", message, data.type);
}
});
@@ -143,14 +136,14 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
}
// Trigger event to refresh threads
- this._mailBus.trigger('update_failed', failed.getMailboxCounter());
+ this._mailBus.trigger("update_failed", failed.getMailboxCounter());
},
});
Discuss.include({
events: _.extend({}, Discuss.prototype.events, {
- 'click .o_failed_message_retry': '_onRetryFailedMessage',
- 'click .o_failed_message_reviewed': '_onMarkFailedMessageReviewed',
+ "click .o_failed_message_retry": "_onRetryFailedMessage",
+ "click .o_failed_message_reviewed": "_onMarkFailedMessageReviewed",
}),
/**
@@ -159,8 +152,8 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
* @private
* @returns {Object}
*/
- _sidebarQWebParams: function () {
- var failed = this.call('mail_service', 'getMailbox', 'failed');
+ _sidebarQWebParams: function() {
+ var failed = this.call("mail_service", "getMailbox", "failed");
return {
activeThreadID: this._thread ? this._thread.getID() : undefined,
failedCounter: failed.getMailboxCounter(),
@@ -173,14 +166,16 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- _renderSidebar: function () {
+ _renderSidebar: function() {
var $sidebar = this._super.apply(this, arguments);
// Because Odoo implementation isn't designed to be inherited
// properly, we inject 'failed' button using jQuery.
- var $failed_item = $(QWeb.render('mail_tracking.SidebarFailed',
- this._sidebarQWebParams()));
+ var $failed_item = $(
+ QWeb.render("mail_tracking.SidebarFailed", this._sidebarQWebParams())
+ );
$failed_item.insertAfter(
- $sidebar.find(".o_mail_discuss_title_main").filter(":last"));
+ $sidebar.find(".o_mail_discuss_title_main").filter(":last")
+ );
return $sidebar;
},
@@ -190,11 +185,11 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- _renderSidebarMailboxes: function () {
+ _renderSidebarMailboxes: function() {
this._super.apply(this, arguments);
- this.$('.o_mail_discuss_sidebar_mailboxes').append(
- QWeb.render('mail_tracking.SidebarFailed',
- this._sidebarQWebParams()));
+ this.$(".o_mail_discuss_sidebar_mailboxes").append(
+ QWeb.render("mail_tracking.SidebarFailed", this._sidebarQWebParams())
+ );
},
/**
@@ -202,12 +197,15 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- _renderButtons: function () {
+ _renderButtons: function() {
this._super.apply(this, arguments);
this.$btn_set_all_reviewed = this.$buttons.find(
- '.o_mail_discuss_button_set_all_reviewed');
- this.$btn_set_all_reviewed
- .on('click', $.proxy(this, "_onSetAllAsReviewedClicked"));
+ ".o_mail_discuss_button_set_all_reviewed"
+ );
+ this.$btn_set_all_reviewed.on(
+ "click",
+ $.proxy(this, "_onSetAllAsReviewedClicked")
+ );
},
/**
@@ -217,11 +215,11 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- _updateControlPanelButtons: function (thread) {
- this.$btn_set_all_reviewed
- .toggleClass(
- 'd-none d-md-none',
- thread.getID() !== 'mailbox_failed');
+ _updateControlPanelButtons: function(thread) {
+ this.$btn_set_all_reviewed.toggleClass(
+ "d-none d-md-none",
+ thread.getID() !== "mailbox_failed"
+ );
return this._super.apply(this, arguments);
},
@@ -233,18 +231,16 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- _updateButtonStatus: function (disabled, type) {
- if (this._thread.getID() === 'mailbox_failed') {
- this.$btn_set_all_reviewed
- .toggleClass('disabled', disabled);
+ _updateButtonStatus: function(disabled, type) {
+ if (this._thread.getID() === "mailbox_failed") {
+ this.$btn_set_all_reviewed.toggleClass("disabled", disabled);
// Display Rainbowman when all failed 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',
+ if (disabled && type === "toggle_tracking_status") {
+ this.trigger_up("show_effect", {
+ message: _t("Congratulations, your failed mailbox is empty"),
+ type: "rainbow_man",
});
}
}
@@ -255,20 +251,18 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- _onMessageUpdated: function (message, type) {
+ _onMessageUpdated: function(message, type) {
var self = this;
var currentThreadID = this._thread.getID();
- if (currentThreadID === 'mailbox_failed' && !message.isFailed()) {
- this._thread.fetchMessages(this.domain)
- .then(function () {
- var options = self._getThreadRenderingOptions();
- self._threadWidget.removeMessageAndRender(
- message.getID(), self._thread, options)
- .then(function () {
- self._updateButtonStatus(
- !self._thread.hasMessages(), type);
- });
- });
+ if (currentThreadID === "mailbox_failed" && !message.isFailed()) {
+ this._thread.fetchMessages(this.domain).then(function() {
+ var options = self._getThreadRenderingOptions();
+ self._threadWidget
+ .removeMessageAndRender(message.getID(), self._thread, options)
+ .then(function() {
+ self._updateButtonStatus(!self._thread.hasMessages(), type);
+ });
+ });
} else {
// Workaround to avoid calling '_fetchAndRenderThread' and
// refetching thread messages because these messages are
@@ -283,9 +277,9 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- _getThreadRenderingOptions: function () {
+ _getThreadRenderingOptions: function() {
var values = this._super.apply(this, arguments);
- if (this._thread.getID() === 'mailbox_failed') {
+ if (this._thread.getID() === "mailbox_failed") {
values.displayEmailIcons = true;
values.displayReplyIcons = false;
values.displayRetryButton = true;
@@ -299,10 +293,13 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @override
*/
- _startListening: function () {
+ _startListening: function() {
this._super.apply(this, arguments);
- this.call('mail_service', 'getMailBus')
- .on('update_failed', this, this._throttledUpdateThreads);
+ this.call("mail_service", "getMailBus").on(
+ "update_failed",
+ this,
+ this._throttledUpdateThreads
+ );
},
// Handlers
@@ -312,10 +309,10 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
* @private
* @param {Event} event
*/
- _onRetryFailedMessage: function (event) {
+ _onRetryFailedMessage: function(event) {
event.preventDefault();
- var messageID = $(event.currentTarget).data('message-id');
- this.do_action('mail.mail_resend_message_action', {
+ var messageID = $(event.currentTarget).data("message-id");
+ this.do_action("mail.mail_resend_message_action", {
additional_context: {
mail_message_to_resend: messageID,
},
@@ -329,12 +326,12 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
* @param {Event} event
* @returns {Promise}
*/
- _onMarkFailedMessageReviewed: function (event) {
+ _onMarkFailedMessageReviewed: function(event) {
event.preventDefault();
- var messageID = $(event.currentTarget).data('message-id');
+ var messageID = $(event.currentTarget).data("message-id");
return this._rpc({
- model: 'mail.message',
- method: 'set_need_action_done',
+ model: "mail.message",
+ method: "set_need_action_done",
args: [[messageID]],
context: this.getSession().user_context,
});
@@ -345,22 +342,21 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
*
* @private
*/
- _onSetAllAsReviewedClicked: function () {
+ _onSetAllAsReviewedClicked: function() {
this._thread.setAllMessagesAsReviewed();
},
});
MailManager.include({
-
/**
* Add the 'failed' mailbox
*
* @override
*/
- _updateMailboxesFromServer: function (data) {
+ _updateMailboxesFromServer: function(data) {
this._super.apply(this, arguments);
this._addMailbox({
- id: 'failed',
+ id: "failed",
name: _t("Failed"),
mailboxCounter: data.failed_counter || 0,
});
@@ -368,20 +364,19 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
});
Mailbox.include({
-
/**
* Overrides to add domain for 'failed' mailbox thread
*
* @override
*/
- _getThreadDomain: function () {
- if (this._id === 'mailbox_failed') {
+ _getThreadDomain: function() {
+ if (this._id === "mailbox_failed") {
return [
- ['mail_tracking_ids.state', 'in', FAILED_STATES],
- ['mail_tracking_needs_action', '=', true],
- '|',
- ['partner_ids', 'in', [session.partner_id]],
- ['author_id', '=', session.partner_id],
+ ["mail_tracking_ids.state", "in", FAILED_STATES],
+ ["mail_tracking_needs_action", "=", true],
+ "|",
+ ["partner_ids", "in", [session.partner_id]],
+ ["author_id", "=", session.partner_id],
];
}
// Workaround to avoid throw 'Missing domain' exception. Call _super
@@ -397,15 +392,14 @@ odoo.define('mail_tracking.FailedMessageDiscuss', function (require) {
* @returns {$.Promise} resolved when all messages have been marked as
* reviewed on the server
*/
- setAllMessagesAsReviewed: function () {
- if (this._id === 'mailbox_failed' && this.getMailboxCounter() > 0) {
+ setAllMessagesAsReviewed: function() {
+ if (this._id === "mailbox_failed" && this.getMailboxCounter() > 0) {
return this._rpc({
- model: 'mail.message',
- method: 'set_all_as_reviewed',
+ model: "mail.message",
+ method: "set_all_as_reviewed",
});
}
return $.when();
},
});
-
});
diff --git a/mail_tracking/static/src/js/failed_message/thread.js b/mail_tracking/static/src/js/failed_message/thread.js
index 652b881..bceacc8 100644
--- a/mail_tracking/static/src/js/failed_message/thread.js
+++ b/mail_tracking/static/src/js/failed_message/thread.js
@@ -1,21 +1,20 @@
/* Copyright 2019 Alexandre Díaz
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). */
-odoo.define('mail_tracking.FailedMessageThread', function (require) {
+odoo.define("mail_tracking.FailedMessageThread", function(require) {
"use strict";
- var AbstractField = require('web.AbstractField');
- var BasicModel = require('web.BasicModel');
- var BasicView = require('web.BasicView');
- var Chatter = require('mail.Chatter');
- var MailThread = require('mail.widget.Thread');
- var utils = require('mail.utils');
- var core = require('web.core');
- var field_registry = require('web.field_registry');
- var time = require('web.time');
+ var AbstractField = require("web.AbstractField");
+ var BasicModel = require("web.BasicModel");
+ var BasicView = require("web.BasicView");
+ var Chatter = require("mail.Chatter");
+ var MailThread = require("mail.widget.Thread");
+ var utils = require("mail.utils");
+ var core = require("web.core");
+ var field_registry = require("web.field_registry");
+ var time = require("web.time");
var QWeb = core.qweb;
-
/**
* Helper method to fetch failed messages
*
@@ -24,28 +23,29 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @param {Array} ids
* @returns {Array}
*/
- function _readMessages (widget, ids) {
+ function _readMessages(widget, ids) {
if (!ids.length) {
return $.when([]);
}
var context = widget.record && widget.record.getContext();
- return widget._rpc({
- model: 'mail.message',
- method: 'get_failed_messages',
- args: [ids],
- context: context || widget.getSession().user_context,
- }).then(function (messages) {
- // Convert date to moment
- _.each(messages, function (msg) {
- msg.date = moment(time.auto_str_to_date(msg.date));
- msg.hour = utils.timeFromNow(msg.date);
+ return widget
+ ._rpc({
+ model: "mail.message",
+ method: "get_failed_messages",
+ args: [ids],
+ context: context || widget.getSession().user_context,
+ })
+ .then(function(messages) {
+ // Convert date to moment
+ _.each(messages, function(msg) {
+ msg.date = moment(time.auto_str_to_date(msg.date));
+ msg.hour = utils.timeFromNow(msg.date);
+ });
+ return messages;
});
- return messages;
- });
}
BasicModel.include({
-
/**
* Fetch data for the 'mail_failed_message' field widget in form views.
*
@@ -54,27 +54,29 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @param {String} fieldName
* @returns {Array}
*/
- _fetchSpecialFailedMessages: function (record, fieldName) {
- var localID = record._changes && fieldName in record._changes
- ? record._changes[fieldName] : record.data[fieldName];
+ _fetchSpecialFailedMessages: function(record, fieldName) {
+ var localID =
+ record._changes && fieldName in record._changes
+ ? record._changes[fieldName]
+ : record.data[fieldName];
return _readMessages(this, this.localData[localID].res_ids);
},
});
var FailedMessage = AbstractField.extend({
- className: 'o_mail_failed_message',
+ className: "o_mail_failed_message",
events: {
- 'click .o_failed_message_retry': '_onRetryFailedMessage',
- 'click .o_failed_message_reviewed': '_onMarkFailedMessageReviewed',
+ "click .o_failed_message_retry": "_onRetryFailedMessage",
+ "click .o_failed_message_reviewed": "_onMarkFailedMessageReviewed",
},
- specialData: '_fetchSpecialFailedMessages',
+ specialData: "_fetchSpecialFailedMessages",
/**
* Overrides to reference failed messages in a easy way
*
* @override
*/
- init: function () {
+ init: function() {
this._super.apply(this, arguments);
this.failed_messages = this.record.specialData[this.name] || [];
},
@@ -84,10 +86,9 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
*
* @override
*/
- start: function () {
+ start: function() {
this._super.apply(this, arguments);
- this.call(
- 'bus_service', 'onNotification', this, this._onNotification);
+ this.call("bus_service", "onNotification", this, this._onNotification);
},
/**
@@ -96,7 +97,7 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @private
* @returns {Object}
*/
- _failedItemsQWebParams: function () {
+ _failedItemsQWebParams: function() {
return {
failed_messages: this.failed_messages,
nbFailedMessages: this.failed_messages.length,
@@ -108,11 +109,14 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
/**
* @private
*/
- _render: function () {
+ _render: function() {
if (this.failed_messages.length) {
- this.$el.html(QWeb.render(
- 'mail_tracking.failed_message_items',
- this._failedItemsQWebParams()));
+ this.$el.html(
+ QWeb.render(
+ "mail_tracking.failed_message_items",
+ this._failedItemsQWebParams()
+ )
+ );
} else {
this.$el.empty();
}
@@ -124,7 +128,7 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @private
* @param {Object} record
*/
- _reset: function (record) {
+ _reset: function(record) {
this._super.apply(this, arguments);
this.failed_messages = this.record.specialData[this.name] || [];
this.res_id = record.res_id;
@@ -136,8 +140,8 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @private
* @param {Array} fieldsToReload
*/
- _reload: function (fieldsToReload) {
- this.trigger_up('reload_mail_fields', fieldsToReload);
+ _reload: function(fieldsToReload) {
+ this.trigger_up("reload_mail_fields", fieldsToReload);
},
/**
@@ -147,10 +151,10 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @param {Int} id
* @returns {Promise}
*/
- _markFailedMessageReviewed: function (id) {
+ _markFailedMessageReviewed: function(id) {
return this._rpc({
- model: 'mail.message',
- method: 'set_need_action_done',
+ model: "mail.message",
+ method: "set_need_action_done",
args: [[id]],
context: this.record.getContext(),
});
@@ -165,13 +169,13 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @private
* @param {Array} notifs
*/
- _onNotification: function (notifs) {
+ _onNotification: function(notifs) {
var self = this;
- _.each(notifs, function (notif) {
+ _.each(notifs, function(notif) {
var model = notif[0][1];
- if (model === 'res.partner') {
+ if (model === "res.partner") {
var data = notif[1];
- if (data.type === 'toggle_tracking_status') {
+ if (data.type === "toggle_tracking_status") {
// Reload 'mail_failed_message' widget
self._reload({failed_message: true});
}
@@ -186,10 +190,10 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @private
* @param {Event} event
*/
- _onRetryFailedMessage: function (event) {
+ _onRetryFailedMessage: function(event) {
event.preventDefault();
- var messageID = $(event.currentTarget).data('message-id');
- this.do_action('mail.mail_resend_message_action', {
+ var messageID = $(event.currentTarget).data("message-id");
+ this.do_action("mail.mail_resend_message_action", {
additional_context: {
mail_message_to_resend: messageID,
},
@@ -202,26 +206,26 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @private
* @param {Event} event
*/
- _onMarkFailedMessageReviewed: function (event) {
+ _onMarkFailedMessageReviewed: function(event) {
event.preventDefault();
- var messageID = $(event.currentTarget).data('message-id');
+ var messageID = $(event.currentTarget).data("message-id");
this._markFailedMessageReviewed(messageID).then(
- $.proxy(this, "_reload", {failed_message: true}));
+ $.proxy(this, "_reload", {failed_message: true})
+ );
},
});
- field_registry.add('mail_failed_message', FailedMessage);
+ field_registry.add("mail_failed_message", FailedMessage);
- var mailWidgets = ['mail_failed_message'];
+ var mailWidgets = ["mail_failed_message"];
BasicView.include({
-
/**
* Overrides to add 'mail_failed_message' widget as "mail widget" used
* in Chatter.
*
* @override
*/
- init: function () {
+ init: function() {
this._super.apply(this, arguments);
var fieldsInfo = this.fieldsInfo[this.viewType];
for (var fieldName in fieldsInfo) {
@@ -245,18 +249,21 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
});
Chatter.include({
-
/**
* Overrides to initialize 'mail_failed_message' widget.
*
* @override
*/
- init: function (parent, record, mailFields, options) {
+ init: function(parent, record, mailFields, options) {
this._super.apply(this, arguments);
// Initialize mail_failed_message widget
if (mailFields.mail_failed_message) {
this.fields.failed_message = new FailedMessage(
- this, mailFields.mail_failed_message, record, options);
+ this,
+ mailFields.mail_failed_message,
+ record,
+ options
+ );
}
},
@@ -266,12 +273,13 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
* @private
* @returns {Promise}
*/
- _render: function () {
+ _render: function() {
var self = this;
- return this._super.apply(this, arguments).then(function () {
+ return this._super.apply(this, arguments).then(function() {
if (self.fields.failed_message) {
self.fields.failed_message.$el.insertBefore(
- self.$el.find('.o_mail_thread'));
+ self.$el.find(".o_mail_thread")
+ );
}
});
},
@@ -281,9 +289,9 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
*
* @override
*/
- _onReloadMailFields: function (event) {
+ _onReloadMailFields: function(event) {
if (this.fields.failed_message && event.data.failed_message) {
- this.trigger_up('reload', {
+ this.trigger_up("reload", {
fieldNames: [this.fields.failed_message.name],
keepChanges: true,
});
@@ -296,13 +304,12 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
});
MailThread.include({
-
/**
* Show 'retry' & 'Set as reviewed' buttons in the Chatter
*
* @override
*/
- init: function () {
+ init: function() {
this._super.apply(this, arguments);
this._enabledOptions.displayRetryButton = true;
this._enabledOptions.displayReviewedButton = true;
@@ -312,5 +319,4 @@ odoo.define('mail_tracking.FailedMessageThread', function (require) {
});
return FailedMessage;
-
});
diff --git a/mail_tracking/static/src/js/mail_tracking.js b/mail_tracking/static/src/js/mail_tracking.js
index 34148a7..2e14eab 100644
--- a/mail_tracking/static/src/js/mail_tracking.js
+++ b/mail_tracking/static/src/js/mail_tracking.js
@@ -2,25 +2,24 @@
Copyright 2018 David Vidal -
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). */
-odoo.define('mail_tracking.partner_tracking', function (require) {
+odoo.define("mail_tracking.partner_tracking", function(require) {
"use strict";
- var core = require('web.core');
- var ActionManager = require('web.ActionManager');
- var AbstractMessage = require('mail.model.AbstractMessage');
- var Message = require('mail.model.Message');
- var ThreadWidget = require('mail.widget.Thread');
+ var core = require("web.core");
+ var ActionManager = require("web.ActionManager");
+ var AbstractMessage = require("mail.model.AbstractMessage");
+ var Message = require("mail.model.Message");
+ var ThreadWidget = require("mail.widget.Thread");
var _t = core._t;
AbstractMessage.include({
-
/**
* Messages do not have any PartnerTrackings.
*
* @returns {Boolean}
*/
- hasPartnerTrackings: function () {
+ hasPartnerTrackings: function() {
return false;
},
@@ -29,13 +28,13 @@ odoo.define('mail_tracking.partner_tracking', function (require) {
*
* @returns {Boolean}
*/
- hasEmailCc: function () {
+ hasEmailCc: function() {
return false;
},
});
Message.include({
- init: function (parent, data) {
+ init: function(parent, data) {
this._super.apply(this, arguments);
this._partnerTrackings = data.partner_trackings || [];
this._emailCc = data.email_cc || [];
@@ -48,7 +47,7 @@ odoo.define('mail_tracking.partner_tracking', function (require) {
* @override
* @returns {Boolean}
*/
- hasPartnerTrackings: function () {
+ hasPartnerTrackings: function() {
return _.some(this._partnerTrackings);
},
@@ -57,7 +56,7 @@ odoo.define('mail_tracking.partner_tracking', function (require) {
*
* @returns {Boolean}
*/
- hasEmailCc: function () {
+ hasEmailCc: function() {
return _.some(this._emailCc);
},
@@ -68,7 +67,7 @@ odoo.define('mail_tracking.partner_tracking', function (require) {
* @override
* @returns {Object[]}
*/
- getPartnerTrackings: function () {
+ getPartnerTrackings: function() {
if (!this.hasPartnerTrackings()) {
return [];
}
@@ -81,7 +80,7 @@ odoo.define('mail_tracking.partner_tracking', function (require) {
*
* @returns {Array}
*/
- getEmailCc: function () {
+ getEmailCc: function() {
if (!this.hasEmailCc()) {
return [];
}
@@ -95,19 +94,19 @@ odoo.define('mail_tracking.partner_tracking', function (require) {
* @param {String} email
* @returns {Boolean}
*/
- isEmailCc: function (email) {
+ isEmailCc: function(email) {
if (!this.hasEmailCc()) {
return false;
}
- return _.some(this._emailCc, function (item) {
+ return _.some(this._emailCc, function(item) {
return item[0] === email;
});
},
- toggleTrackingStatus: function () {
+ toggleTrackingStatus: function() {
return this._rpc({
- model: 'mail.message',
- method: 'toggle_tracking_status',
+ model: "mail.message",
+ method: "toggle_tracking_status",
args: [[this.id]],
});
},
@@ -115,53 +114,52 @@ odoo.define('mail_tracking.partner_tracking', function (require) {
ThreadWidget.include({
events: _.extend(ThreadWidget.prototype.events, {
- 'click .o_mail_action_tracking_partner':
- 'on_tracking_partner_click',
- 'click .o_mail_action_tracking_status': 'on_tracking_status_click',
+ "click .o_mail_action_tracking_partner": "on_tracking_partner_click",
+ "click .o_mail_action_tracking_status": "on_tracking_status_click",
}),
- on_tracking_partner_click: function (event) {
- var partner_id = this.$el.find(event.currentTarget).data('partner');
+ on_tracking_partner_click: function(event) {
+ var partner_id = this.$el.find(event.currentTarget).data("partner");
var state = {
- 'model': 'res.partner',
- 'id': partner_id,
- 'title': _t("Tracking partner"),
+ model: "res.partner",
+ id: partner_id,
+ title: _t("Tracking partner"),
};
event.preventDefault();
this.action_manager.do_push_state(state);
var action = {
- type:'ir.actions.act_window',
- view_type: 'form',
- view_mode: 'form',
- res_model: 'res.partner',
- views: [[false, 'form']],
- target: 'current',
+ type: "ir.actions.act_window",
+ view_type: "form",
+ view_mode: "form",
+ res_model: "res.partner",
+ views: [[false, "form"]],
+ target: "current",
res_id: partner_id,
};
this.do_action(action);
},
- on_tracking_status_click: function (event) {
- var tracking_email_id = $(event.currentTarget).data('tracking');
+ on_tracking_status_click: function(event) {
+ var tracking_email_id = $(event.currentTarget).data("tracking");
var state = {
- 'model': 'mail.tracking.email',
- 'id': tracking_email_id,
- 'title': _t("Message tracking"),
+ model: "mail.tracking.email",
+ id: tracking_email_id,
+ title: _t("Message tracking"),
};
event.preventDefault();
this.action_manager.do_push_state(state);
var action = {
- type:'ir.actions.act_window',
- view_type: 'form',
- view_mode: 'form',
- res_model: 'mail.tracking.email',
- views: [[false, 'form']],
- target: 'new',
+ type: "ir.actions.act_window",
+ view_type: "form",
+ view_mode: "form",
+ res_model: "mail.tracking.email",
+ views: [[false, "form"]],
+ target: "new",
res_id: tracking_email_id,
};
this.do_action(action);
},
- init: function () {
+ init: function() {
this._super.apply(this, arguments);
- this.action_manager = this.findAncestor(function (ancestor) {
+ this.action_manager = this.findAncestor(function(ancestor) {
return ancestor instanceof ActionManager;
});
},
diff --git a/mail_tracking/static/src/xml/failed_message/common.xml b/mail_tracking/static/src/xml/failed_message/common.xml
index 0961617..5aeeb81 100644
--- a/mail_tracking/static/src/xml/failed_message/common.xml
+++ b/mail_tracking/static/src/xml/failed_message/common.xml
@@ -1,13 +1,21 @@
-
+
-
- Set as Reviewed
+
+ Set as Reviewed
-
- Retry
+
+ Retry
diff --git a/mail_tracking/static/src/xml/failed_message/discuss.xml b/mail_tracking/static/src/xml/failed_message/discuss.xml
index 8f56388..3248de4 100644
--- a/mail_tracking/static/src/xml/failed_message/discuss.xml
+++ b/mail_tracking/static/src/xml/failed_message/discuss.xml
@@ -1,25 +1,31 @@
-
+
-
-
+
+
-
-
Failed
-
-
+
+ Failed
+
+
- Congratulations, you don't have any failed messages
+ Congratulations, you don't have any failed messages
Failed messages appear here.
@@ -27,7 +33,11 @@
-
+
diff --git a/mail_tracking/static/src/xml/mail_tracking.xml b/mail_tracking/static/src/xml/mail_tracking.xml
index 37e4d2e..ebfaf46 100644
--- a/mail_tracking/static/src/xml/mail_tracking.xml
+++ b/mail_tracking/static/src/xml/mail_tracking.xml
@@ -1,4 +1,4 @@
-
+
@@ -7,54 +7,57 @@
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
+
To:
@@ -62,21 +65,35 @@
-
-
-
+
+
-
+
-
-
-
-
+
+
+
+
diff --git a/mail_tracking/views/assets.xml b/mail_tracking/views/assets.xml
index 5853ae1..9fa8b7a 100644
--- a/mail_tracking/views/assets.xml
+++ b/mail_tracking/views/assets.xml
@@ -1,21 +1,33 @@
-
+
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/mail_tracking/views/mail_message_view.xml b/mail_tracking/views/mail_message_view.xml
index 44c7fae..57d98a3 100644
--- a/mail_tracking/views/mail_message_view.xml
+++ b/mail_tracking/views/mail_message_view.xml
@@ -1,9 +1,9 @@
-
+
mail.message
-
+
diff --git a/mail_tracking/views/mail_tracking_email_view.xml b/mail_tracking/views/mail_tracking_email_view.xml
index 57a28b3..2ada713 100644
--- a/mail_tracking/views/mail_tracking_email_view.xml
+++ b/mail_tracking/views/mail_tracking_email_view.xml
@@ -1,4 +1,4 @@
-
+
@@ -9,50 +9,54 @@
@@ -85,25 +94,63 @@
mail.tracking.email
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
@@ -114,12 +161,15 @@
MailTracking emails
mail.tracking.email
tree,form
-
+
-
+
diff --git a/mail_tracking/views/mail_tracking_event_view.xml b/mail_tracking/views/mail_tracking_event_view.xml
index f6609b6..20f0ff3 100644
--- a/mail_tracking/views/mail_tracking_event_view.xml
+++ b/mail_tracking/views/mail_tracking_event_view.xml
@@ -1,4 +1,4 @@
-
+
@@ -11,40 +11,46 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
@@ -55,21 +61,29 @@
mail.tracking.event.tree
mail.tracking.event
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -79,32 +93,88 @@
mail.tracking.event
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+ context="{'event_error_filter': True}"
+ />
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -114,13 +184,16 @@
MailTracking events
mail.tracking.event
tree,form
-
+
-
+