Autre #73948
formatage numéros de téléphone
0%
Description
(description un peu longue pour servir de mémo sur la situation actuelle, pour ce ticket "chapeau", pour remettre de l'ordre et une compréhension générale, a minima dans w.c.s.).
w.c.s.; un champ peut être typé "numéro de téléphone français" ou "numéro de téléphone".
Ce paramétrage contrôlait la validation,
- numéro de téléphone = grosso modo des chiffres r'\+?[-\(\)\d\.\s/]+'
- numéro de téléphone franças = la même + validation par phonenumbers que le code pays est dans [33, 262, 508, 590, 594, 596]
À ça, parce que authentic a été modifié pour stocker/communiquer pour le profil usager des numéros formatés E164,
le préremplissage selon un champ du profil de type numéro a été modifié pour qu'à l'affichage ça soit un numéro
mis en forme qui apparaisse (ex: 01 23 45 67 89 et non +33123456789)
Cette remise en forme passe par la méthode get_formatted_phone,
def get_formatted_phone(number, country_code=None): if not country_code: country_code = get_publisher().get_site_option('default-country-code') or 'FR' try: pn = phonenumbers.parse(number) except phonenumbers.NumberParseException: try: pn = phonenumbers.parse(number, country_code) except phonenumbers.NumberParseException: return number if phonenumbers.is_valid_number(pn): return phonenumbers.format_number(pn, phonenumbers.PhoneNumberFormat.NATIONAL) else: return number
Cette fonction va tout le temps envoyer un numéro formaté local (phonenumbers.PhoneNumberFormat.NATIONAL).
Cas nominal on a dans authentic +33123456790 ça affiche 01 23 45 67 89, ok.
Mais si dans authentic on a +3223456789, pn = phonenumbers.parse(number) → PhoneNumber(country_code=32...) → .format_number() → 02 345 67 89 (ça affiche numéro local belge, pour l'agent français qui aurait à appeler l'usager, ça foirerait).
Cas de la Réunion :
- numéro local, 0262 33 46 00
- phonenumbers.parse('0262 33 46 00') → NumberParseException → ça se fait ensuite avec 'FR' → PhoneNumber(country_code=33, national_number=262334600... qui est faux
- vs phonenumbers.parse('+2 62 33 46 00') → PhoneNumber(country_code=262, national_number=334600... qui est correct
→ pour parser, c'est ok uniquement quand les numéros envoyés par Authentic sont E164, lui passer un numéro local donnera l'impression de passer, mais sera faux.
(il me semble qu'il n'y a pas eu de migration des données existantes dans authentic vers le format E164)
Globalement, c'est OK sauf si le code pays local correspond au code pays du numéro.
Mais au final, comme ça enchaine les erreurs, à la Réunion on tape 0262 33 46 00, c'est pris comme +33 262 33 46 00, affiché sous la forme ("métropole") 02 62 33 46 00, ça donne l'impression d'être ok.
Related issues
History
Updated by Frédéric Péters almost 2 years ago
Étape 1, le default-country-code n'est pas aligné avec la nomenclature de phonenumbers, c'est source de confusion je trouve.
Dans phonenumbers, il y a des régions ("FR" ou "RE") et des "country code" (33 ou 262), on peut passer de l'un à l'autre :
>>> phonenumbers.country_code_for_region('FR') 33 >>> phonenumbers.country_code_for_region('RE') 262 >>> phonenumbers.region_code_for_country_code(33) 'FR' >>> phonenumbers.region_code_for_country_code(262) 'RE'
On pourrait avoir dans la configuration local-phone-region ("FR") ou local-phone-country-code (33), mais pas default-country-code ("FR") ?
Comme on approche de la configuration globale côté hobo (#72760) c'est le moment.
Updated by Frédéric Péters almost 2 years ago
Ensuite, pour w.c.s., continuons à stocker ce qui est tapé comme c'est tapé mais ajoutons une normalisation pour la recherche full text, sur les champs qualifiés de téléphone, où on indexerait également la forme E164.
Ça se passerait dans #72773, je me suis assigné ce ticket pour qu'il ne bouge pas sans qu'on sache globalement où on va.
Updated by Frédéric Péters almost 2 years ago
- Related to Développement #72773: Sur une recherche full text adapter les numéros de téléphone added
Updated by Frédéric Péters almost 2 years ago
- Related to Développement #72760: écran sms, intégrer la sélection du code pays added
Updated by Paul Marillonnet almost 2 years ago
- Related to Développement #49212: Création de compte avec un numéro de téléphone mobile added
Updated by Paul Marillonnet almost 2 years ago
- Related to Bug #73998: settings : les codes pays pour les zones téléphoniques françaises hors-métropoles sont erronées added
Updated by Frédéric Péters 7 months ago
- Status changed from Nouveau to Fermé
#72793 vient de passer et doit couvrir tout ça. (et c'est important de poser local-region-code hors France métropolitaine).