Files
odoo_source/addons/website_crm/models/website_visitor.py
T
Thibault Delavallée fff19019de [IMP] crm: make some internal methods private
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
2021-01-07 11:16:28 +00:00

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()