[IMP] mail: Add counter in starred
This commit is contained in:
committed by
Yannick Tivisse
parent
e4ae6a80bb
commit
253d4eccf0
@@ -221,8 +221,8 @@
|
||||
<field name="subtype_id" ref="mail.mt_comment"/>
|
||||
<field name="author_id" ref="base.partner_demo"/>
|
||||
</record>
|
||||
<function model="mail.message" name="set_message_starred"
|
||||
eval="[ ref('msg_case18_aplicant')], True"
|
||||
<function model="mail.message" name="toggle_message_starred"
|
||||
eval="[ref('msg_case18_aplicant')]"
|
||||
/>
|
||||
<record id="msg_case_salesman0_aplicant" model="mail.message">
|
||||
<field name="subject">Refuse Application</field>
|
||||
|
||||
@@ -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']),
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
<div t-attf-class="o_mail_chat_channel_item #{(active_channel_id == 'channel_starred') ? 'o_active': ''}"
|
||||
data-channel-id="channel_starred">
|
||||
<span class="o_channel_name"> <i class="fa fa-star-o"/> Starred </span>
|
||||
<t t-set="counter" t-value="starred_counter"/>
|
||||
<t t-call="mail.chat.SidebarNeedaction"/>
|
||||
</div>
|
||||
|
||||
<t t-set="channel_type" t-value="'public'"/>
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user