mirror of
https://github.com/bringout/oca-ocb-mail.git
synced 2026-04-22 11:02:02 +02:00
95 lines
4.5 KiB
Python
95 lines
4.5 KiB
Python
# 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)]
|