[IMP] mail: add view_inbox options on js. Inside the inbox, when the user mark a message as read/done, don't apply this value, for the stared/favorite message.

bzr revid: chm@openerp.com-20121105112517-tfkao2nuukewvm2y
This commit is contained in:
Christophe Matthieu 2012-11-05 12:25:17 +01:00
parent 1db87cc080
commit 356fc45fac
2 changed files with 49 additions and 23 deletions

View File

@ -12,6 +12,7 @@
],
'context': {'default_model': 'res.users', 'default_res_id': uid},
'view_mailbox': True,
'view_inbox': True,
'read_action': 'read', }""/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">

View File

@ -158,7 +158,7 @@ openerp.mail = function (session) {
this.author_id = datasets.author_id || [this.session.uid],
this.attachment_ids = datasets.attachment_ids || [],
this.partner_ids = datasets.partner_ids || [];
this.nb_messages = datasets.nb_messages;
this.nb_messages = datasets.nb_messages || false;
this._date = datasets.date;
this.format_data();
@ -205,6 +205,28 @@ openerp.mail = function (session) {
}
},
/* get all child message id linked.
* @return array of id
*/
get_child_ids: function () {
return _.map(this.get_childs(), function (val) { return val.id; });
},
/* get all child message linked.
* @return array of message object
*/
get_childs: function (nb_thread_level) {
var res=[];
if (arguments[1]) res.push(this);
if ((isNaN(nb_thread_level) || nb_thread_level>0) && this.thread) {
_(this.thread.messages).each(function (val, key) {
res = res.concat( val.get_childs((isNaN(nb_thread_level) ? undefined : nb_thread_level-1), true) );
});
}
return res;
},
/**
* call on_message_delete on his parent thread
*/
@ -214,6 +236,7 @@ openerp.mail = function (session) {
this.parent_thread.on_message_detroy(this);
}
});
/**
@ -741,10 +764,10 @@ openerp.mail = function (session) {
* @param {callback} apply function
*/
check_for_rerender: function () {
var domain = mail.ChatterUtils.expand_domain( this.options.root_thread.domain ).concat([["id", "=", this.id]]);
var domain = mail.ChatterUtils.expand_domain( this.options.root_thread.domain ).concat([["id", "in", [this.id].concat(this.get_child_ids()) ]]);
return this.parent_thread.ds_message.call('message_read', [undefined, domain, [], 0, this.context, this.parent_thread.id])
.then( _.bind(function (record) {
if (!record || !record.length) {
this.animated_destroy(150);
@ -774,7 +797,20 @@ openerp.mail = function (session) {
*/
on_message_read_unread: function (read_value) {
var self = this;
var message_ids = [this.id].concat(this.get_child_ids());
var messages = [this].concat(this.get_childs());
// inside the inbox, when the user mark a message as read/done, don't apply this value
// for the stared/favorite message
if (this.options.view_inbox && read_value) {
var messages = _.filter(messages, function (val) { return !val.is_favorite; });
if (!messages.length) {
this.check_for_rerender();
return false;
}
}
var message_ids = _.map(messages, function (val) { return val.id; });
this.ds_notification.call('set_message_read', [message_ids, read_value, this.context])
.then(function () {
self.to_read = !read_value;
@ -820,24 +856,6 @@ openerp.mail = function (session) {
return false;
},
/* get all child message id linked.
* @return array of id
*/
get_child_ids: function () {
return _.map(this.get_childs(), function (val) { return val.id; });
},
/* get all child message linked.
* @return array of message object
*/
get_childs: function () {
if (this.thread) {
return _.map(this.thread.get_childs(), function (val) {return val.parent_message;});
} else {
return [];
}
},
/**
* add or remove a vote for a message and display the result
*/
@ -869,6 +887,7 @@ openerp.mail = function (session) {
event.stopPropagation();
var self=this;
var button = self.$('.oe_star:first');
this.ds_message.call('favorite_toggle', [[self.id]])
.then(function (star) {
self.is_favorite=star;
@ -876,7 +895,11 @@ openerp.mail = function (session) {
button.addClass('oe_starred');
} else {
button.removeClass('oe_starred');
// check if the message must be display
}
if (self.options.view_inbox && self.is_favorite) {
self.on_message_read_unread(true);
} else {
self.check_for_rerender();
}
});
@ -1377,6 +1400,7 @@ openerp.mail = function (session) {
'show_record_name' : false,
'show_compose_message' : false,
'show_compact_message' : false,
'view_inbox': false,
'message_ids': undefined,
'no_message': false
}, options);
@ -1578,6 +1602,7 @@ openerp.mail = function (session) {
'show_read_unread_button': true,
'show_compose_message': true,
'show_compact_message': this.context.view_mailbox ? false : 1,
'view_inbox': this.context.view_inbox ? false : true,
})
);
return this.root.replace(this.$('.oe_mail-placeholder'));