Skip to Content
Menu
This question has been flagged
2 Replies
3452 Views

For example when there is a new Lead via contact form the members of the sales team get a mail.
But how can i set up that there is this bubble notificatin with the need action counter on the side menu?


Please help

Avatar
Discard
Best Answer

Inherit 'ir.needaction_mixin'  and override the function

@api.model
def _needaction_domain_get(self):
return [('needaction', '=', True)]
Avatar
Discard
Author Best Answer

Thanks for the quick anwser.

For which file should i search? Or do i have to make this change via the webinterface?

Avatar
Discard

Check mail module, mail_message.py

Author

Thanks but in this file there are more

@api.model

e.g.

@api.model

def _search_needaction(self, operator, operand):

if operator == '=' and operand:

return ['&', ('notification_ids.res_partner_id', '=', self.env.user.partner_id.id), ('notification_ids.is_read', '=', False)]

return ['&', ('notification_ids.res_partner_id', '=', self.env.user.partner_id.id), ('notification_ids.is_read', '=', True)]

@api.depends('starred_partner_ids')

def _get_starred(self):

""" Compute if the message is starred by the current user. """

# TDE FIXME: use SQL

starred = self.sudo().filtered(lambda msg: self.env.user.partner_id in msg.starred_partner_ids)

for message in self:

message.starred = message in starred

@api.model

def _search_starred(self, operator, operand):

if operator == '=' and operand:

return [('starred_partner_ids', 'in', [self.env.user.partner_id.id])]

return [('starred_partner_ids', 'not in', [self.env.user.partner_id.id])]

#------------------------------------------------------

# Notification API

#------------------------------------------------------

@api.model

def mark_all_as_read(self, channel_ids=None, domain=None):

""" Remove all needactions of the current partner. If channel_ids is

given, restrict to messages written in one of those channels. """

partner_id = self.env.user.partner_id.id

delete_mode = not self.env.user.share # delete employee notifs, keep customer ones

if not domain and delete_mode:

query = "DELETE FROM mail_message_res_partner_needaction_rel WHERE res_partner_id IN %s"

args = [(partner_id,)]

if channel_ids:

query += """

AND mail_message_id in

(SELECT mail_message_id

FROM mail_message_mail_channel_rel

WHERE mail_channel_id in %s)"""

args += [tuple(channel_ids)]

query += " RETURNING mail_message_id as id"

self._cr.execute(query, args)

self.invalidate_cache()

ids = [m['id'] for m in self._cr.dictfetchall()]

else:

# not really efficient method: it does one db request for the

# search, and one for each message in the result set to remove the

# current user from the relation.

msg_domain = [('needaction_partner_ids', 'in', partner_id)]

if channel_ids:

msg_domain += [('channel_ids', 'in', channel_ids)]

unread_messages = self.search(expression.AND([msg_domain, domain]))

notifications = self.env['mail.notification'].sudo().search([

('mail_message_id', 'in', unread_messages.ids),

('res_partner_id', '=', self.env.user.partner_id.id),

('is_read', '=', False)])

if delete_mode:

notifications.unlink()

else:

notifications.write({'is_read': True})

ids = unread_messages.mapped('id')

notification = {'type': 'mark_as_read', 'message_ids': ids, 'channel_ids': channel_ids}

self.env['bus.bus'].sendone((self._cr.dbname, 'res.partner', self.env.user.partner_id.id), notification)

return ids