diff --git a/addons/phone_validation/tests/test_phonenumbers.py b/addons/phone_validation/tests/test_phonenumbers.py index 720291f099a..aeb7a61d4ec 100644 --- a/addons/phone_validation/tests/test_phonenumbers.py +++ b/addons/phone_validation/tests/test_phonenumbers.py @@ -21,3 +21,26 @@ class TestPhonenumbers(BaseCase): phone_validation.phone_format('0456998877', None, '32', force_format='E164'), '+32456998877' ) + + def test_get_region_data_for_number(self): + for source, (exp_code, exp_national_number, exp_phone_code) in zip( + [ + '+32456998877', # all hail Philippe + '+1-613-555-0177', # canada, same phone_code as US + '+1-202-555-0124', # us, same phone_code as CA + ], + [ + ('BE', '456998877', '32'), + ('CA', '6135550177', '1'), + ('US', '2025550124', '1'), + ], + ): + with self.subTest(source=source): + self.assertDictEqual( + phone_validation.phone_get_region_data_for_number(source), + { + 'code': exp_code, + 'national_number': exp_national_number, + 'phone_code': exp_phone_code, + } + ) diff --git a/addons/phone_validation/tools/phone_validation.py b/addons/phone_validation/tools/phone_validation.py index 75f3ac5dbbf..918332de8d3 100644 --- a/addons/phone_validation/tools/phone_validation.py +++ b/addons/phone_validation/tools/phone_validation.py @@ -60,6 +60,21 @@ try: phone_fmt = phonenumbers.PhoneNumberFormat.NATIONAL return phonenumbers.format_number(phone_nbr, phone_fmt) + def phone_get_region_data_for_number(number): + try: + phone_obj = phone_parse(number, None) + except (phonenumbers.phonenumberutil.NumberParseException, UserError): + return { + 'code': '', + 'national_number': '', + 'phone_code': '', + } + return { + 'code': phonenumbers.phonenumberutil.region_code_for_number(phone_obj), + 'national_number': str(phone_obj.national_number), + 'phone_code': str(phone_obj.country_code), + } + except ImportError: def phone_parse(number, country_code): @@ -74,3 +89,10 @@ except ImportError: ) _phonenumbers_lib_warning = True return number + + def phone_get_region_code_for_number(number): + return { + 'code': '', + 'national_number': '', + 'phone_code': '', + }