[FW][FIX] phone_validation, crm: fix usage of number sanitizing on partner model
``CRM`` application calls ``phone_get_sanitized_number`` on partner model to
synchronize lead values to its partner values. This method is defined in
``mail.thread.phone`` mixin. ``Partner`` model inherit from this mixin in
``SMS`` application which is auto install after mail and IAP. If this app
is removed, code is not reachable anymore and lead synchronize fails.
How to reproduce
* install CRM and its automatically installed dependencies;
* uninstall IAP;
* run lead unit tests -> synchronize crashes due to missing method as partner
does not inherit from the mixin anymore;
In this commit we define the missing methods on Partner model directly into
phone_validation. In SMS the inherit order is fixed so that the mixin method
takes over the manually defined one.
Fixes #79460.
X-original-commit: eefac25da8d8a01e5f7da8fab35810da402c0bd9
Part-of: odoo/odoo#88970
Co-authored-by: Thibault Delavallée <tde@odoo.com>
This commit is contained in:
committed by
Thibault Delavallée
co-authored by
Thibault Delavallée
parent
6112259c66
commit
2cc76d0db0
@@ -368,8 +368,10 @@ class TestCRMLead(TestCrmCommon):
|
||||
self.assertFalse(lead.mobile)
|
||||
self.assertFalse(lead.phone_sanitized)
|
||||
self.assertEqual(partner.mobile, partner_mobile)
|
||||
self.assertEqual(partner.phone_sanitized, partner_mobile_sanitized,
|
||||
'Partner sanitized should be computed on mobile')
|
||||
# if SMS is uninstalled, phone_sanitized is not available on partner
|
||||
if 'phone_sanitized' in partner:
|
||||
self.assertEqual(partner.phone_sanitized, partner_mobile_sanitized,
|
||||
'Partner sanitized should be computed on mobile')
|
||||
|
||||
@users('user_sales_manager')
|
||||
def test_crm_lead_partner_sync_email_phone_corner_cases(self):
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import api, models
|
||||
@@ -30,3 +29,16 @@ class Partner(models.Model):
|
||||
force_format='INTERNATIONAL',
|
||||
raise_exception=False
|
||||
)
|
||||
|
||||
def phone_get_sanitized_number(self, number_fname='mobile', force_format='E164'):
|
||||
""" Stand alone version, allowing to use it on partner model without
|
||||
having any dependency on sms module. To cleanup in master (15.3 +)."""
|
||||
self.ensure_one()
|
||||
country_fname = 'country_id'
|
||||
number = self[number_fname]
|
||||
return phone_validation.phone_sanitize_numbers_w_record([number], self, record_country_fname=country_fname, force_format=force_format)[number]['sanitized']
|
||||
|
||||
def _phone_get_number_fields(self):
|
||||
""" Stand alone version, allowing to use it on partner model without
|
||||
having any dependency on sms module. To cleanup in master (15.3 +)."""
|
||||
return ['mobile', 'phone']
|
||||
|
||||
@@ -6,7 +6,7 @@ from odoo import models
|
||||
|
||||
class ResPartner(models.Model):
|
||||
_name = 'res.partner'
|
||||
_inherit = ['res.partner', 'mail.thread.phone']
|
||||
_inherit = ['mail.thread.phone', 'res.partner']
|
||||
|
||||
def _sms_get_default_partners(self):
|
||||
""" Override of mail.thread method.
|
||||
|
||||
Reference in New Issue
Block a user