i have this function trigger_test_notif for testing and send_chatter_message for sending the chatter a message but on some browser it is just not converting to absolute link like when i send it from chrome or brave to other browser it works but when i do it from safari,firefox,explorer it just doesnt convert to absolute link just showing the url as string. Also is there any way i can just send message to multiple people but 1-to-many instead of looping through 1-to-1
def trigger_test_notif(self):
self.ensure_one()
partner_ids = None
message = 'TEST MESSGAE'
message_type = 'with_link'
user_ids = None
if user_ids is None and partner_ids is None:
user_ids = [2, 6, 186]
return self.send_chatter_message(user_ids, partner_ids, message, message_type)
def send_chatter_message(self, user_ids, partner_ids, message, message_type):
self.ensure_one()
if partner_ids:
if hasattr(partner_ids, 'ids'):
partners = partner_ids
elif isinstance(partner_ids, (list, tuple, set)):
flat = []
for p in partner_ids:
if isinstance(p, (list, tuple, set)):
flat.extend(p)
else:
flat.append(p)
partners = self.env['res.partner'].browse([int(x) for x in flat if x])
else:
partners = self.env['res.partner'].browse([int(partner_ids)])
else:
if user_ids:
if isinstance(user_ids, (list, tuple, set)):
u_ids = [int(u) for u in user_ids if u]
else:
u_ids = [int(user_ids)]
else:
u_ids = []
users = self.env['res.users'].browse(u_ids)
partners = users.mapped('partner_id')
if not partners:
return False
sender_pid = int(self.env.user.partner_id.id)
recipients = partners.filtered(lambda p: p.id != sender_pid)
if not recipients:
return False
text = (message or "").strip()
model_name = self._name
record_link = '/web#id=%s&model=%s&view_type=form' % (self.id, model_name)
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') or ''
if base_url.endswith('/'):
base_url = base_url.rstrip('/')
full_record_url = base_url + record_link if base_url else record_link
if message_type == 'with_link':
display = text or "This is a chat message"
safe_href = full_record_url
body = '<div>%s</div><div><a href="%s" target="_blank" rel="noopener">Open record</a></div><div>%s</div>' % (display, safe_href, safe_href)
else:
display = text or "This is a chat message"
body = '<div>%s</div>' % (display)
channel_obj = self.env['discuss.channel'].sudo()
for partner in recipients:
channel_ids = channel_obj.search([
('channel_partner_ids', 'in', [partner.id]),
('channel_partner_ids', 'in', [sender_pid])
]).filtered(lambda r: len(r.channel_partner_ids) == 2).ids
if channel_ids:
ch = channel_obj.browse(channel_ids[0])
else:
vals = {
'channel_type': 'chat',
'name': partner.name + ', ' + self.env.user.name,
'channel_partner_ids': [(4, partner.id), (4, sender_pid)],
}
ch = channel_obj.create(vals)
posted = ch.with_context(mail_create_nosubscribe=True).message_post(
body=body,
message_type='comment',
subtype_xmlid='mail.mt_comment',
author_id=sender_pid,
)
try:
msg = self.env['mail.message'].sudo().browse(posted.id)
msg.write({'body': body})
except Exception as e:
_logger.warning("Failed to overwrite mail.message body id=%s: %s", getattr(posted, 'id', None), e)
return True