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)