summaryrefslogtreecommitdiff
path: root/addons/website_livechat/models/website.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_livechat/models/website.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_livechat/models/website.py')
-rw-r--r--addons/website_livechat/models/website.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/addons/website_livechat/models/website.py b/addons/website_livechat/models/website.py
new file mode 100644
index 00000000..a4bd8b15
--- /dev/null
+++ b/addons/website_livechat/models/website.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models, _
+from odoo.addons.http_routing.models.ir_http import url_for
+
+
+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 {}
+
+ def get_suggested_controllers(self):
+ suggested_controllers = super(Website, self).get_suggested_controllers()
+ suggested_controllers.append((_('Live Support'), url_for('/livechat'), 'website_livechat'))
+ return suggested_controllers