Files
odoo_source/addons/website_livechat/models/website.py
T
David Beguin 5b62f6e0b6 [IMP] website_livechat : enable chat request on all livechat enabled pages
Before this commit, only the tracked page can start the chat request at visitor
side. Which is a bit sad as the operator can send the visitor a chat request
but if the visitor goes on a non tracked page but has the opportunity to start
a livechat, the chat request won't reach the visitor.

This commit refactor the way a chat request is sent to the client side.
Instead of looking for a opened chat request on every page request,
the chat request information (if any opened) is added to the channel info
that are given to the Livechat button widget.

If the widget receives chat request infos, the widget set himself, before
starting, the cookie of the livechat session using the chat request
informations. Then, the conversation (from chat request) is automatically
loaded as any other opened chat session.

Task ID: 2081550
PR #40274

Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
2020-01-02 15:14:47 +00:00

58 lines
2.4 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class Website(models.Model):
_inherit = "website"
channel_id = fields.Many2one('im_livechat.channel', string='Website Live Chat Channel')
def get_livechat_channel_info(self):
""" Get the livechat info dict (button text, channel name, ...) for the livechat channel of
the current website.
"""
self.ensure_one()
if self.channel_id:
livechat_info = self.channel_id.sudo().get_livechat_info()
if livechat_info['available']:
livechat_request_session = self._get_livechat_request_session()
if livechat_request_session:
livechat_info['options']['chat_request_session'] = livechat_request_session
return livechat_info
return {}
def _get_livechat_request_session(self):
"""
Check if there is an opened chat request for the website livechat channel and the current visitor (from request).
If so, prepare the livechat session information that will be stored in visitor's cookies
and used by livechat widget to directly open this session instead of allowing the visitor to
initiate a new livechat session.
:param {int} channel_id: channel
:return: {dict} livechat request session information
"""
visitor = self.env['website.visitor']._get_visitor_from_request()
if visitor:
# get active chat_request linked to visitor
chat_request_channel = self.env['mail.channel'].sudo().search([
('livechat_visitor_id', '=', visitor.id),
('livechat_channel_id', '=', self.channel_id.id),
('livechat_active', '=', True),
('channel_message_ids', '!=', False)
], order='create_date desc', limit=1)
if chat_request_channel:
return {
"folded": False,
"id": chat_request_channel.id,
"operator_pid": [
chat_request_channel.livechat_operator_id.id,
chat_request_channel.livechat_operator_id.display_name
],
"name": chat_request_channel.name,
"uuid": chat_request_channel.uuid,
"type": "chat_request"
}
return {}