diff --git a/addons/website_crm/models/website_visitor.py b/addons/website_crm/models/website_visitor.py index 7bd3570a17a..82fa1367967 100644 --- a/addons/website_crm/models/website_visitor.py +++ b/addons/website_crm/models/website_visitor.py @@ -14,3 +14,47 @@ class WebsiteVisitor(models.Model): def _compute_lead_count(self): for visitor in self: visitor.lead_count = len(visitor.lead_ids) + + @api.depends('user_partner_id.email_normalized', 'user_partner_id.mobile', 'lead_ids.email_normalized', 'lead_ids.mobile') + def _compute_email_phone(self): + super(WebsiteVisitor, self)._compute_email_phone() + self.flush() + sql = """ SELECT v.id as visitor_id, l.id as lead_id, + CASE WHEN p.email_normalized is not null THEN p.email_normalized ELSE l.email_normalized END as email, + CASE WHEN p.mobile is not null THEN p.mobile WHEN l.mobile is not null THEN l.mobile ELSE l.phone END as mobile + FROM website_visitor v + JOIN crm_lead_website_visitor_rel lv on lv.website_visitor_id = v.id + JOIN crm_lead l ON lv.crm_lead_id = l.id + LEFT JOIN res_partner p on p.id = v.user_partner_id + WHERE v.id in %s + ORDER BY l.create_date ASC""" + self.env.cr.execute(sql, (tuple(self.ids),)) + results = self.env.cr.dictfetchall() + mapped_data = {} + for result in results: + visitor_info = mapped_data.get(result['visitor_id'], {'email': '', 'mobile': ''}) + visitor_info['email'] += result['email'] + ',' + visitor_info['mobile'] = result['mobile'] + mapped_data[result['visitor_id']] = visitor_info + + for visitor in self: + email = mapped_data.get(visitor.id, {}).get('email') + visitor.email = email[:-1] if email else False + visitor.mobile = mapped_data.get(visitor.id, {}).get('mobile') + + def _prepare_visitor_send_mail_values(self): + visitor_mail_values = super(WebsiteVisitor, self)._prepare_visitor_send_mail_values() + if self.lead_ids: + lead = self.lead_ids._sort_by_confidence_level(reverse=True)[0] + partner_id = self.user_partner_id.id + if not self.user_partner_id: + partner_id = lead.handle_partner_assignation()[lead.id] + if not lead.partner_id: + lead.partner_id = partner_id + self.user_partner_id = partner_id + return { + 'res_model': 'crm.lead', + 'res_id': lead.id, + 'partner_ids': [partner_id], + } + return visitor_mail_values