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
This commit is contained in:
Benjamin Dauvergne 2019-09-26 21:07:27 +02:00
parent 1dbc707733
commit e1a14f6c2e
3 changed files with 32 additions and 18 deletions

View File

@ -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'):

View File

@ -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",

View File

@ -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')