PURPOSE Prepare sales team membership and lead assignment improvements by reorganizing and cleaning some code bits. SPECIFICATIONS Tools methods should be private by default to indicate those are not part of official convert or merge API for leads. In this commit we make convert and merge tool methods private, keeping only main API methods public. LINKS Task ID-2428882 Prepares Task ID-2086889 COM PR odoo/odoo#64196 ENT PT odoo/enterprise#15610
58 lines
2.6 KiB
Python
58 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import fields, models, api
|
|
|
|
|
|
class WebsiteVisitor(models.Model):
|
|
_inherit = 'website.visitor'
|
|
|
|
lead_ids = fields.Many2many('crm.lead', string='Leads', groups="sales_team.group_sale_salesman")
|
|
lead_count = fields.Integer('# Leads', compute="_compute_lead_count", groups="sales_team.group_sale_salesman")
|
|
|
|
@api.depends('lead_ids')
|
|
def _compute_lead_count(self):
|
|
for visitor in self:
|
|
visitor.lead_count = len(visitor.lead_ids)
|
|
|
|
@api.depends('partner_id.email_normalized', 'partner_id.mobile', 'lead_ids.email_normalized', 'lead_ids.mobile')
|
|
def _compute_email_phone(self):
|
|
super(WebsiteVisitor, self)._compute_email_phone()
|
|
self.flush()
|
|
|
|
left_visitors = self.filtered(lambda visitor: not visitor.email or not visitor.mobile)
|
|
leads = left_visitors.mapped('lead_ids').sorted('create_date', reverse=True)
|
|
visitor_to_lead_ids = dict((visitor.id, visitor.lead_ids.ids) for visitor in left_visitors)
|
|
|
|
for visitor in left_visitors:
|
|
visitor_leads = leads.filtered(lambda lead: lead.id in visitor_to_lead_ids[visitor.id])
|
|
if not visitor.email:
|
|
visitor.email = next((lead.email_normalized for lead in visitor_leads if lead.email_normalized), False)
|
|
if not visitor.mobile:
|
|
visitor.mobile = next((lead.mobile or lead.phone for lead in visitor_leads if lead.mobile or lead.phone), False)
|
|
|
|
def _check_for_message_composer(self):
|
|
check = super(WebsiteVisitor, self)._check_for_message_composer()
|
|
if not check and self.lead_ids:
|
|
sorted_leads = self.lead_ids._sort_by_confidence_level(reverse=True)
|
|
partners = sorted_leads.mapped('partner_id')
|
|
if not partners:
|
|
main_lead = self.lead_ids[0]
|
|
main_lead._handle_partner_assignment(create_missing=True)
|
|
self.partner_id = main_lead.partner_id.id
|
|
return True
|
|
return check
|
|
|
|
def _prepare_message_composer_context(self):
|
|
if not self.partner_id and self.lead_ids:
|
|
sorted_leads = self.lead_ids._sort_by_confidence_level(reverse=True)
|
|
lead_partners = sorted_leads.mapped('partner_id')
|
|
partner = lead_partners[0] if lead_partners else False
|
|
if partner:
|
|
return {
|
|
'default_model': 'crm.lead',
|
|
'default_res_id': sorted_leads[0].id,
|
|
'default_partner_ids': partner.ids,
|
|
}
|
|
return super(WebsiteVisitor, self)._prepare_message_composer_context()
|