From 2cc76d0db0dd3d91a253a2d63b597fc752c8ae0a Mon Sep 17 00:00:00 2001 From: Adam Heinz Date: Thu, 24 Feb 2022 13:26:00 +0000 Subject: [PATCH] [FW][FIX] phone_validation, crm: fix usage of number sanitizing on partner model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ``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 --- addons/crm/tests/test_crm_lead.py | 6 ++++-- addons/phone_validation/models/res_partner.py | 14 +++++++++++++- addons/sms/models/res_partner.py | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/addons/crm/tests/test_crm_lead.py b/addons/crm/tests/test_crm_lead.py index ebf64312175..1ab197bc917 100644 --- a/addons/crm/tests/test_crm_lead.py +++ b/addons/crm/tests/test_crm_lead.py @@ -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): diff --git a/addons/phone_validation/models/res_partner.py b/addons/phone_validation/models/res_partner.py index 99f1ff13cf4..2f98353e21e 100644 --- a/addons/phone_validation/models/res_partner.py +++ b/addons/phone_validation/models/res_partner.py @@ -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'] diff --git a/addons/sms/models/res_partner.py b/addons/sms/models/res_partner.py index f1f63b85561..3215fa66832 100644 --- a/addons/sms/models/res_partner.py +++ b/addons/sms/models/res_partner.py @@ -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.