45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, models
|
|
from odoo.addons.phone_validation.tools import phone_validation
|
|
|
|
|
|
class Partner(models.Model):
|
|
_name = 'res.partner'
|
|
_inherit = ['res.partner']
|
|
|
|
@api.onchange('phone', 'country_id', 'company_id')
|
|
def _onchange_phone_validation(self):
|
|
if self.phone:
|
|
self.phone = self._phone_format(self.phone, force_format='INTERNATIONAL')
|
|
|
|
@api.onchange('mobile', 'country_id', 'company_id')
|
|
def _onchange_mobile_validation(self):
|
|
if self.mobile:
|
|
self.mobile = self._phone_format(self.mobile, force_format='INTERNATIONAL')
|
|
|
|
def _phone_format(self, number, country=None, company=None, force_format='E164'):
|
|
country = country or self.country_id or self.env.company.country_id
|
|
if not country or not number:
|
|
return number
|
|
return phone_validation.phone_format(
|
|
number,
|
|
country.code if country else None,
|
|
country.phone_code if country else None,
|
|
force_format=force_format,
|
|
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']
|