From 988d530657c1fb465225d08e86b43122dde8927c Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 26 Sep 2019 21:07:27 +0200 Subject: [PATCH] mdel: construct a foreign addres from french addres fields (#33826) - use etage and batiment fields - correctly put the postal code before the city name - check the address is correct in the tests --- passerelle/apps/mdel/models.py | 39 ++++++++++++++++--------- tests/data/mdel/formdata_aec_naiss.json | 9 +++--- tests/test_mdel.py | 2 +- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/passerelle/apps/mdel/models.py b/passerelle/apps/mdel/models.py index 9650823b..3d572ab1 100644 --- a/passerelle/apps/mdel/models.py +++ b/passerelle/apps/mdel/models.py @@ -264,25 +264,38 @@ class Demand(models.Model): formdata[key] = formdata[key].upper() # Merging street number and street name - formdata['demandeur_adresse_voie'] = '%s %s' % (formdata.get('demandeur_adresse_num', ''), - formdata.get('demandeur_adresse_voie')) + demandeur_adresse_voie = formdata.get('demandeur_adresse_voie') + demandeur_adresse_num = formdata.get('demandeur_adresse_num') + if demandeur_adresse_voie and demandeur_adresse_num: + formdata['demandeur_adresse_voie'] = '%s %s' % (demandeur_adresse_num, demandeur_adresse_voie) + # Set foreign address if country is not France + adresse_keys = ['etage', 'batiment', 'voie', 'code_postal', 'ville'] + adresse_keys = ['demandeur_adresse_%s' % key for key in adresse_keys] demandeur_adresse_pays_raw = formdata.get('demandeur_adresse_pays_raw') demandeur_adresse_etrangere = formdata.get('demandeur_adresse_etrangere') - if demandeur_adresse_pays_raw and demandeur_adresse_pays_raw != 'FRA': - formdata['demandeur_adresse_etrangere_pays_raw'] = formdata.pop('demandeur_adresse_pays_raw') + demandeur_adresse_etrangere_pays_raw = formdata.get('demandeur_adresse_etrangere_pays_raw') + if (demandeur_adresse_etrangere_pays_raw + or (demandeur_adresse_pays_raw and demandeur_adresse_pays_raw != 'FRA')): + formdata.pop('demandeur_adresse_pays_raw', None) + if not demandeur_adresse_etrangere_pays_raw: + formdata['demandeur_adresse_etrangere_pays_raw'] = demandeur_adresse_pays_raw if demandeur_adresse_etrangere: # dismiss french address if the foreign one is filled - formdata.pop('demandeur_adresse_voie', None) - formdata.pop('demandeur_adresse_ville', None) - formdata.pop('demandeur_adresse_code_postal', None) + for key in adresse_keys: + if key in formdata: + del formdata[key] else: - adresse_etrangere = formdata.pop('demandeur_adresse_voie', '') - if formdata.get('demandeur_adresse_ville'): - adresse_etrangere += ', %s' % formdata['demandeur_adresse_ville'] - if formdata.get('demandeur_adresse_code_postal'): - adresse_etrangere += ', %s' % formdata['demandeur_adresse_code_postal'] - formdata['demandeur_adresse_etrangere'] = adresse_etrangere + # build foreign address from french address fields + adresse_etrangere = [] + for key in adresse_keys: + value = formdata.pop(key, '') + if value: + if key != 'demandeur_adresse_ville': + adresse_etrangere.append(value) + else: + adresse_etrangere[-1] += ' %s' % value + formdata['demandeur_adresse_etrangere'] = ', '.join(adresse_etrangere) # Set aec_nature if aec_type_raw == DECES if formdata.get('aec_type_raw') == 'DECES' and not formdata.get('aec_nature_raw'): diff --git a/tests/data/mdel/formdata_aec_naiss.json b/tests/data/mdel/formdata_aec_naiss.json index b29aaa1e..610f2b44 100644 --- a/tests/data/mdel/formdata_aec_naiss.json +++ b/tests/data/mdel/formdata_aec_naiss.json @@ -25,18 +25,19 @@ "fields": { "aec_nature": "Copie int\u00e9grale", "aec_nature_raw": "COPIE-INTEGRALE", - "demandeur_adresse_code_postal": "54000", + "demandeur_adresse_etage": "3ème", + "demandeur_adresse_batiment": "Bâtiment B", + "demandeur_adresse_code_postal": "3800", "demandeur_adresse_num": "37", "demandeur_adresse_pays_raw": "Suisse", - "demandeur_adresse_ville": "Nancy", - "demandeur_adresse_voie": "Rue de l'Aigle Blanc", + "demandeur_adresse_ville": "Bern", + "demandeur_adresse_voie": "rue de Paris", "demandeur_civilite": "Madame", "demandeur_civilite_raw": "Madame", "demandeur_email": "chelsea@whatever.com", "demandeur_nom": "Whatever", "demandeur_prenom": "Chelsea", "demandeur_telephone": "0122334455", - "demandeur_adresse_etrangere": "1, rue de Paris, 3800 Bern, Suisse", "motif_demande": "Certificat de nationalit\u00e9 fran\u00e7aise", "motif_demande_raw": "CertificatDeNationaliteFrancaise", "nombre_exemplaires": "2", diff --git a/tests/test_mdel.py b/tests/test_mdel.py index 362b3f8b..7ecb9228 100644 --- a/tests/test_mdel.py +++ b/tests/test_mdel.py @@ -161,7 +161,7 @@ def test_create_aec_demand_type(app, setup, aec_payload): assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455' assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Fils' assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays').text == 'Suisse' - assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text == '1, rue de Paris, 3800 Bern, Suisse' + assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text == '3ème, Bâtiment B, 37 rue de Paris, 3800 Bern' assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal') assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville') -- 2.23.0