diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website_livechat/models/website.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_livechat/models/website.py')
| -rw-r--r-- | addons/website_livechat/models/website.py | 63 |
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 |
