19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:39 +01:00
parent 5df8c07b59
commit daa394e8b0
2114 changed files with 564841 additions and 299642 deletions

View file

@ -0,0 +1,95 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from markupsafe import Markup
from werkzeug.exceptions import BadRequest, NotFound
from odoo import Command
from odoo.http import request, route
from odoo.addons.mail.controllers.discuss.channel import ChannelController
class LivechatChannelController(ChannelController):
@route("/im_livechat/session/update_note", auth="user", methods=["POST"], type="jsonrpc")
def livechat_session_update_note(self, channel_id, note):
"""Internal users having the rights to read the session can update its note."""
if self.env.user.share:
raise NotFound()
channel = request.env["discuss.channel"].search([("id", "=", channel_id)])
if not channel:
raise NotFound()
# sudo: discuss.channel - internal users having the rights to read the session can update its note
# Markup: note sanitized when written on the field
channel.sudo().livechat_note = Markup(note)
@route("/im_livechat/session/update_status", auth="user", methods=["POST"], type="jsonrpc")
def livechat_session_update_status(self, channel_id, livechat_status):
"""Internal users having the rights to read the session can update its status."""
if self.env.user.share:
raise NotFound()
channel = request.env["discuss.channel"].search([("id", "=", channel_id)])
if not channel:
raise NotFound()
# sudo: discuss.channel - internal users having the rights to read the session can update its status
channel.sudo().livechat_status = livechat_status
@route("/im_livechat/conversation/update_tags", auth="user", methods=["POST"], type="jsonrpc")
def livechat_conversation_update_tags(self, channel_id, tag_ids, method="ADD"):
"""Add or remove tags from a live chat conversation."""
if not self.env["im_livechat.conversation.tag"].has_access("write"):
raise NotFound()
channel = request.env["discuss.channel"].search([("id", "=", channel_id)])
if not channel:
raise NotFound()
# sudo: discuss.channel - internal users having the rights to read the conversation and to
# write tags can update the tags
if method == "ADD":
channel.sudo().livechat_conversation_tag_ids = [
Command.link(tag_id) for tag_id in tag_ids
]
elif method == "DELETE":
channel.sudo().livechat_conversation_tag_ids = [
Command.unlink(tag_id) for tag_id in tag_ids
]
if channel.livechat_status == "need_help":
request.env.ref("im_livechat.im_livechat_group_user")._bus_send(
"im_livechat.looking_for_help/tags",
{
"channel_id": channel.id,
"tag_ids": channel.sudo().livechat_conversation_tag_ids.ids,
},
subchannel="LOOKING_FOR_HELP",
)
@route(
"/im_livechat/conversation/write_expertises", auth="user", methods=["POST"], type="jsonrpc"
)
def livechat_conversation_write_expertises(self, channel_id, orm_commands):
if any(cmd[0] not in (Command.LINK, Command.UNLINK) for cmd in orm_commands):
raise BadRequest(
self.env._("Write expertises: Only LINK and UNLINK commands are allowed.")
)
if not self.env.user.has_group("im_livechat.im_livechat_group_user"):
return
if channel := request.env["discuss.channel"].search(
[("id", "=", channel_id), ("channel_type", "=", "livechat")]
):
# sudo: discuss.channel - live chat users can update the expertises of any live chat.
channel.sudo().livechat_expertise_ids = orm_commands
@route(
"/im_livechat/conversation/create_and_link_expertise",
auth="user",
methods=["POST"],
type="jsonrpc",
)
def livechat_conversation_create_and_link_expertise(self, channel_id, expertise_name):
channel = request.env["discuss.channel"].search(
[("id", "=", channel_id), ("channel_type", "=", "livechat")]
)
if not channel:
return
stripped_name = expertise_name.strip()
expertise = request.env["im_livechat.expertise"].search([("name", "=", stripped_name)])
if not expertise:
expertise = request.env["im_livechat.expertise"].create({"name": stripped_name})
channel.livechat_expertise_ids = [Command.link(expertise.id)]