diff --git a/addons/hr_recruitment/data/hr_recruitment_demo.xml b/addons/hr_recruitment/data/hr_recruitment_demo.xml
index 41c9ea456f2..a10ea4bb939 100644
--- a/addons/hr_recruitment/data/hr_recruitment_demo.xml
+++ b/addons/hr_recruitment/data/hr_recruitment_demo.xml
@@ -221,8 +221,8 @@
-
Refuse Application
diff --git a/addons/mail/controllers/main.py b/addons/mail/controllers/main.py
index 8fa7777ca5d..6aa5d854aaa 100644
--- a/addons/mail/controllers/main.py
+++ b/addons/mail/controllers/main.py
@@ -240,6 +240,7 @@ class MailController(http.Controller):
def mail_client_action(self):
values = {
'needaction_inbox_counter': request.env['res.partner'].get_needaction_count(),
+ 'starred_counter': request.env['res.partner'].get_starred_count(),
'channel_slots': request.env['mail.channel'].channel_fetch_slot(),
'mention_partner_suggestions': request.env['res.partner'].get_static_mention_suggestions(),
'emoji': request.env['mail.shortcode'].sudo().search_read([('shortcode_type', '=', 'image')], ['source', 'substitution', 'description']),
diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py
index 949cef23138..c054b6e10a3 100644
--- a/addons/mail/models/mail_message.py
+++ b/addons/mail/models/mail_message.py
@@ -237,14 +237,13 @@ class Message(models.Model):
self.env['bus.bus'].sendone((self._cr.dbname, 'res.partner', self.env.user.partner_id.id), notification)
@api.multi
- def set_message_starred(self, starred):
- """ Set messages as (un)starred. Technically, the notifications related
+ def toggle_message_starred(self):
+ """ Toggle messages as (un)starred. Technically, the notifications related
to uid are set to (un)starred.
-
- :param bool starred: set notification as (un)starred
"""
# a user should always be able to star a message he can read
self.check_access_rule('read')
+ starred = not self.starred
if starred:
self.sudo().write({'starred_partner_ids': [(4, self.env.user.partner_id.id)]})
else:
diff --git a/addons/mail/models/res_partner.py b/addons/mail/models/res_partner.py
index 5e3f4685282..46012ce2447 100644
--- a/addons/mail/models/res_partner.py
+++ b/addons/mail/models/res_partner.py
@@ -227,6 +227,18 @@ class Partner(models.Model):
_logger.error('Call to needaction_count without partner_id')
return 0
+ @api.model
+ def get_starred_count(self):
+ """ compute the number of starred of the current user """
+ if self.env.user.partner_id:
+ self.env.cr.execute("""
+ SELECT count(*) as starred_count
+ FROM mail_message_res_partner_starred_rel R
+ WHERE R.res_partner_id = %s """, (self.env.user.partner_id.id,))
+ return self.env.cr.dictfetchall()[0].get('starred_count')
+ _logger.error('Call to starred_count without partner_id')
+ return 0
+
@api.model
def get_static_mention_suggestions(self):
""" To be overwritten to return the id, name and email of partners used as static mention
diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js
index bc1d7ec4d48..4c57a8453b7 100644
--- a/addons/mail/static/src/js/chat_manager.js
+++ b/addons/mail/static/src/js/chat_manager.js
@@ -31,6 +31,7 @@ var unread_conversation_counter = 0;
var emojis = [];
var emoji_substitutions = {};
var needaction_counter = 0;
+var starred_counter = 0;
var mention_partner_suggestions = [];
var discuss_menu_id;
var global_unread_counter = 0;
@@ -498,14 +499,17 @@ function on_toggle_star_notification (data) {
message.is_starred = data.starred;
if (!message.is_starred) {
remove_message_from_channel("channel_starred", message);
+ starred_counter--;
} else {
add_to_cache(message, []);
var channel_starred = chat_manager.get_channel('channel_starred');
channel_starred.cache = _.pick(channel_starred.cache, "[]");
+ starred_counter++;
}
chat_manager.bus.trigger('update_message', message);
}
});
+ chat_manager.bus.trigger('update_starred', starred_counter);
}
function on_mark_as_read_notification (data) {
@@ -684,7 +688,7 @@ var chat_manager = {
toggle_star_status: function (message_id) {
var msg = _.findWhere(messages, { id: message_id });
- return MessageModel.call('set_message_starred', [[message_id], !msg.is_starred]);
+ return MessageModel.call('toggle_message_starred', [[message_id]]);
},
unstar_all: function () {
return MessageModel.call('unstar_all', [[]], {});
@@ -761,6 +765,9 @@ var chat_manager = {
get_needaction_counter: function () {
return needaction_counter;
},
+ get_starred_counter: function () {
+ return starred_counter;
+ },
get_chat_unread_counter: function () {
return chat_unread_counter;
},
@@ -968,6 +975,7 @@ function init () {
_.each(channels, add_channel);
});
needaction_counter = result.needaction_inbox_counter;
+ starred_counter = result.starred_counter;
mention_partner_suggestions = result.mention_partner_suggestions;
emojis = result.emoji;
_.each(emojis, function(emoji) {
diff --git a/addons/mail/static/src/js/client_action.js b/addons/mail/static/src/js/client_action.js
index 3e3def75383..1b3f9666ec4 100644
--- a/addons/mail/static/src/js/client_action.js
+++ b/addons/mail/static/src/js/client_action.js
@@ -262,6 +262,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
});
chat_manager.bus.on('unsubscribe_from_channel', self, self.render_sidebar);
chat_manager.bus.on('update_needaction', self, self.throttled_render_sidebar);
+ chat_manager.bus.on('update_starred', self, self.throttled_render_sidebar);
chat_manager.bus.on('update_channel_unread_counter', self, self.throttled_render_sidebar);
chat_manager.bus.on('update_dm_presence', self, self.throttled_render_sidebar);
self.thread.$el.on("scroll", null, _.debounce(function () {
@@ -303,6 +304,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
active_channel_id: this.channel ? this.channel.id: undefined,
channels: chat_manager.get_channels(),
needaction_counter: chat_manager.get_needaction_counter(),
+ starred_counter: chat_manager.get_starred_counter(),
}));
this.$(".o_mail_chat_sidebar").html($sidebar.contents());
diff --git a/addons/mail/static/src/xml/client_action.xml b/addons/mail/static/src/xml/client_action.xml
index cc819aece0a..746082b7fe9 100644
--- a/addons/mail/static/src/xml/client_action.xml
+++ b/addons/mail/static/src/xml/client_action.xml
@@ -26,6 +26,8 @@
Starred
+
+
diff --git a/addons/mail/tests/test_mail_message.py b/addons/mail/tests/test_mail_message.py
index edd0f0eae9a..6407d97c9cf 100644
--- a/addons/mail/tests/test_mail_message.py
+++ b/addons/mail/tests/test_mail_message.py
@@ -240,14 +240,14 @@ class TestMailMessage(TestMail):
msg_emp = self.env['mail.message'].sudo(self.user_employee).browse(msg.id)
# Admin set as starred
- msg.set_message_starred(True)
+ msg.toggle_message_starred()
self.assertTrue(msg.starred)
# Employee set as starred
- msg_emp.set_message_starred(True)
+ msg_emp.toggle_message_starred()
self.assertTrue(msg_emp.starred)
# Do: Admin unstars msg
- msg.set_message_starred(False)
+ msg.toggle_message_starred()
self.assertFalse(msg.starred)
self.assertTrue(msg_emp.starred)