@@ -162,12 +162,6 @@ class CrmLead(models.Model):
162162 date_deadline = fields .Date ('Expected Closing' , help = "Estimate of the date on which the opportunity will be won." )
163163 # Customer / contact
164164
165- # UX field to ease partner creation
166- # Not to be relied on for business logic
167- commercial_partner_id = fields .Many2one (
168- 'res.partner' , string = 'Customer Company' , domain = "[('is_company', '=', True)]" ,
169- compute = '_compute_commercial_partner_id' , readonly = False , store = False ,
170- )
171165 partner_id = fields .Many2one (
172166 'res.partner' , string = 'Contact' , check_company = True , index = True , tracking = 10 ,
173167 help = "Linked partner (optional). Usually created when converting the lead. You can find a partner by its Name, TIN, Email or Internal Reference." )
@@ -395,38 +389,6 @@ def _compute_name(self):
395389 if not lead .name and lead .partner_id and lead .partner_id .name :
396390 lead .name = _ ("%s's opportunity" ) % lead .partner_id .name
397391
398- @api .depends ('partner_id' , 'partner_name' )
399- def _compute_commercial_partner_id (self ):
400- leads_w_partners = self .filtered ('partner_id' )
401- for lead in leads_w_partners :
402- commercial_partner = lead .partner_id .commercial_partner_id
403- lead .commercial_partner_id = commercial_partner .is_company and commercial_partner != lead .partner_id and commercial_partner
404- # match by name if exists
405- remaining_leads_w_pname = (self - leads_w_partners ).filtered ('partner_name' )
406- commercial_partner_by_name = self .env ['res.partner' ]._read_group (
407- [('is_company' , '=' , True ), ('name' , 'in' , remaining_leads_w_pname .mapped ('partner_name' ))],
408- ['name' ], ['id:array_agg' ],
409- )
410- remaining_leads_by_name = remaining_leads_w_pname .grouped ('partner_name' )
411- for commercial_partner_name , commercial_partner_ids in commercial_partner_by_name :
412- remaining_leads_by_name [commercial_partner_name ].commercial_partner_id = commercial_partner_ids [0 ]
413-
414- @api .onchange ('commercial_partner_id' )
415- def _onchange_commercial_partner_id (self ):
416- for lead in self :
417- if lead .partner_id and lead .commercial_partner_id and lead .commercial_partner_id != lead .partner_id .commercial_partner_id :
418- # writing to partner will invalidate and recompute
419- # re-write the original value to keep user selection
420- commercial_partner = lead .commercial_partner_id
421- lead .update ({
422- 'partner_id' : False ,
423- 'email_from' : False ,
424- 'phone' : False ,
425- })
426- lead .commercial_partner_id = commercial_partner
427- if not lead .name and lead .commercial_partner_id :
428- lead .name = _ ("%s's opportunity" , lead .commercial_partner_id .name )
429-
430392 @api .depends ('partner_id' )
431393 def _compute_contact_name (self ):
432394 """ compute the new values when partner_id has changed """
@@ -714,8 +676,8 @@ def _prepare_partner_name_from_partner(self, partner):
714676 partner_name = partner .parent_id .name
715677 if not partner_name and partner .is_company :
716678 partner_name = partner .name
717- elif not partner_name and partner .company_name :
718- partner_name = partner .company_name
679+ elif not partner_name and partner .parent_name :
680+ partner_name = partner .parent_name
719681 return {'partner_name' : partner_name or self .partner_name }
720682
721683 def _get_partner_email_update (self , force_void = True ):
@@ -771,20 +733,6 @@ def create(self, vals_list):
771733 won_to_set = leads .filtered (lambda l : not l .date_closed and l .stage_id .is_won )
772734 won_to_set .write ({'date_closed' : fields .Datetime .now ()})
773735
774- if self .default_get (['partner_id' ]).get ('partner_id' ) is None :
775- commercial_partner_ids = [vals ['commercial_partner_id' ] for vals in vals_list if vals .get ('commercial_partner_id' )]
776- CommercialPartners = self .env ['res.partner' ].with_prefetch (commercial_partner_ids )
777- for lead , lead_vals in zip (leads , vals_list , strict = True ):
778- if not lead_vals .get ('partner_id' ) and lead_vals .get ('commercial_partner_id' ):
779- commercial_partner = CommercialPartners .browse (lead_vals ['commercial_partner_id' ])
780- if (lead .phone or lead .email_from ) and (
781- lead .phone_sanitized != commercial_partner .phone_sanitized or
782- lead .email_normalized != commercial_partner .email_normalized
783- ):
784- lead .partner_name = lead .partner_name or commercial_partner .name
785- continue
786- lead .partner_id = commercial_partner
787-
788736 leads ._handle_won_lost ({}, {
789737 lead .id : {
790738 'is_lost' : lead .won_status == 'lost' ,
@@ -2002,18 +1950,18 @@ def _create_customer(self, with_parent=None):
20021950 if with_parent :
20031951 partner_company = with_parent
20041952 elif self .partner_name :
2005- partner_company = Partner .create (self ._prepare_customer_values (self .partner_name , is_company = True ))
1953+ partner_company = Partner .create (self ._prepare_customer_values (self .partner_name ))
20061954 elif self .partner_id :
20071955 partner_company = self .partner_id
20081956 else :
20091957 partner_company = self .env ['res.partner' ]
20101958
20111959 if contact_name :
2012- return Partner .create (self ._prepare_customer_values (contact_name , is_company = False , parent_id = partner_company .id ))
1960+ return Partner .create (self ._prepare_customer_values (contact_name , parent_id = partner_company .id ))
20131961
20141962 if partner_company :
20151963 return partner_company
2016- return Partner .create (self ._prepare_customer_values (self .name , is_company = False ))
1964+ return Partner .create (self ._prepare_customer_values (self .name ))
20171965
20181966 def _get_customer_information (self ):
20191967 email_keys_to_values = super ()._get_customer_information ()
@@ -2025,24 +1973,18 @@ def _get_customer_information(self):
20251973 continue
20261974 values = email_keys_to_values .setdefault (email_key , {})
20271975 contact_name = lead .contact_name or parse_contact_from_email (lead .email_from )[0 ] or lead .email_from
2028- is_company = bool (lead .partner_name ) and contact_name == lead .partner_name
20291976 # Note that we don't attempt to create the parent company even if partner name is set
20301977 values .update ({
20311978 key : val for key , val in lead ._prepare_customer_values (
2032- contact_name , is_company = is_company , parent_id = False
1979+ contact_name , parent_id = False
20331980 ).items () if val and key != 'email' # don't force email used as criterion
20341981 })
2035- values ['is_company' ] = is_company
2036- if not is_company and lead .commercial_partner_id :
2037- values ['parent_id' ] = lead .commercial_partner_id .id
2038- values .pop ('company_name' , None )
20391982 return email_keys_to_values
20401983
2041- def _prepare_customer_values (self , partner_name , is_company = False , parent_id = False ):
1984+ def _prepare_customer_values (self , partner_name , parent_id = False ):
20421985 """ Extract data from lead to create a partner.
20431986
20441987 :param partner_name : future name of the partner
2045- :param is_company : True if the partner is a company
20461988 :param parent_id : id of the parent partner (False if no parent)
20471989
20481990 :return: dictionary of values to give at res_partner.create()
@@ -2065,10 +2007,10 @@ def _prepare_customer_values(self, partner_name, is_company=False, parent_id=Fal
20652007 'website' : self .website ,
20662008 # company / hierarchy
20672009 'parent_id' : parent_id ,
2068- 'is_company' : is_company ,
2069- 'company_name' : not is_company and not parent_id and self .partner_name ,
20702010 'type' : 'contact'
20712011 }
2012+ if not parent_id and self .partner_name :
2013+ res ['parent_name' ] = self .partner_name
20722014 if self .lang_id .active :
20732015 res ['lang' ] = self .lang_id .code
20742016 return res
0 commit comments