Files
odoo_source/addons/crm/wizard/crm_partner_binding.py
T
Nimesh Jethva 71820dbc20 [IMP]crm_*, sale_*: Improvement in model description
Purpose of this commit is to give description more "business oriented"
because those descriptions appears in Odoo Studio which is supposed to be used by end users, not only by developers.

Related Task ID : 37311
2018-09-21 11:45:14 +02:00

68 lines
2.6 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class PartnerBinding(models.TransientModel):
"""
Handle the partner binding or generation in any CRM wizard that requires
such feature, like the lead2opportunity wizard, or the
phonecall2opportunity wizard. Try to find a matching partner from the
CRM model's information (name, email, phone number, etc) or create a new
one on the fly.
Use it like a mixin with the wizard of your choice.
"""
_name = 'crm.partner.binding'
_description = 'Partner linking/binding in CRM wizard'
@api.model
def default_get(self, fields):
res = super(PartnerBinding, self).default_get(fields)
partner_id = self._find_matching_partner()
if 'action' in fields and not res.get('action'):
res['action'] = 'exist' if partner_id else 'create'
if 'partner_id' in fields:
res['partner_id'] = partner_id
return res
action = fields.Selection([
('exist', 'Link to an existing customer'),
('create', 'Create a new customer'),
('nothing', 'Do not link to a customer')
], 'Related Customer', required=True)
partner_id = fields.Many2one('res.partner', 'Customer')
@api.model
def _find_matching_partner(self):
""" Try to find a matching partner regarding the active model data, like
the customer's name, email, phone number, etc.
:return int partner_id if any, False otherwise
"""
# active model has to be a lead
if self._context.get('active_model') != 'crm.lead' or not self._context.get('active_id'):
return False
lead = self.env['crm.lead'].browse(self._context.get('active_id'))
# find the best matching partner for the active model
Partner = self.env['res.partner']
if lead.partner_id: # a partner is set already
return lead.partner_id.id
if lead.email_from: # search through the existing partners based on the lead's email
partner = Partner.search([('email', '=', lead.email_from)], limit=1)
return partner.id
if lead.partner_name: # search through the existing partners based on the lead's partner or contact name
partner = Partner.search([('name', 'ilike', '%' + lead.partner_name + '%')], limit=1)
return partner.id
if lead.contact_name:
partner = Partner.search([('name', 'ilike', '%' + lead.contact_name+'%')], limit=1)
return partner.id
return False