summaryrefslogtreecommitdiff
path: root/addons/crm_livechat/models
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/crm_livechat/models
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/crm_livechat/models')
-rw-r--r--addons/crm_livechat/models/__init__.py4
-rw-r--r--addons/crm_livechat/models/mail_channel.py58
2 files changed, 62 insertions, 0 deletions
diff --git a/addons/crm_livechat/models/__init__.py b/addons/crm_livechat/models/__init__.py
new file mode 100644
index 00000000..58536ecc
--- /dev/null
+++ b/addons/crm_livechat/models/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import mail_channel
diff --git a/addons/crm_livechat/models/mail_channel.py b/addons/crm_livechat/models/mail_channel.py
new file mode 100644
index 00000000..9c775983
--- /dev/null
+++ b/addons/crm_livechat/models/mail_channel.py
@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models, _
+from odoo.tools import html2plaintext, html_escape
+
+
+class MailChannel(models.Model):
+ _inherit = 'mail.channel'
+
+ def _define_command_lead(self):
+ return {'help': _('Create a new lead (/lead lead title)')}
+
+ def _execute_command_lead(self, **kwargs):
+ partner = self.env.user.partner_id
+ key = kwargs['body']
+ channel_partners = self.env['mail.channel.partner'].search([
+ ('partner_id', '!=', partner.id),
+ ('channel_id', '=', self.id)], limit=1
+ )
+ if key.strip() == '/lead':
+ msg = self._define_command_lead()['help']
+ else:
+ lead = self._convert_visitor_to_lead(partner, channel_partners, key)
+ msg = _('Created a new lead: <a href="#" data-oe-id="%s" data-oe-model="crm.lead">%s</a>') % (lead.id, html_escape(lead.name))
+ self._send_transient_message(partner, msg)
+
+ def _convert_visitor_to_lead(self, partner, channel_partners, key):
+ """ Create a lead from channel /lead command
+ :param partner: internal user partner (operator) that created the lead;
+ :param channel_partners: channel members;
+ :param key: operator input in chat ('/lead Lead about Product')
+ """
+ description = ''.join(
+ '%s: %s\n' % (message.author_id.name or self.anonymous_name, message.body)
+ for message in self.channel_message_ids.sorted('id')
+ )
+ # if public user is part of the chat: consider lead to be linked to an
+ # anonymous user whatever the participants. Otherwise keep only share
+ # partners (no user or portal user) to link to the lead.
+ customers = self.env['res.partner']
+ for customer in channel_partners.partner_id.filtered('partner_share').with_context(active_test=False):
+ if customer.user_ids and all(user._is_public() for user in customer.user_ids):
+ customers = self.env['res.partner']
+ break
+ else:
+ customers |= customer
+
+ utm_source = self.env.ref('crm_livechat.utm_source_livechat', raise_if_not_found=False)
+ return self.env['crm.lead'].create({
+ 'name': html2plaintext(key[5:]),
+ 'partner_id': customers[0].id if customers else False,
+ 'user_id': False,
+ 'team_id': False,
+ 'description': html2plaintext(description),
+ 'referred': partner.name,
+ 'source_id': utm_source and utm_source.id,
+ })