remplacement des clés variables par deux uniques dans le ws séparation

La liste des identifiants des enfants est à fournir soit dans une clé
adresse_principale_1 ou adresse_principale_2.
This commit is contained in:
Benjamin Dauvergne 2017-03-22 16:17:33 +01:00
parent 00b84b15cf
commit 3e4d543205
2 changed files with 26 additions and 15 deletions

View File

@ -328,7 +328,7 @@ def test_create_individu(app, rsu_schema):
assert data['enfants'][0]['id'] == enfant_id
response = app.post_json(separation_url, params={
'enfant_%s' % enfant_id: 1,
'adresse_principale_1': [enfant_id],
})
assert Entity.objects.count() == 6

View File

@ -713,7 +713,7 @@ class SeparationView(APIView):
'data': {
'union': individu_to_response(conjoint),
'union_statut': conjoint_rel.content['statut'],
'enfants': [individu_to_response(enfant) for enfant in
'enfants': [individu_to_response(enfant, add_text=True) for enfant in
self.enfants_communs(individu, conjoint)],
},
})
@ -759,18 +759,29 @@ class SeparationView(APIView):
.update(right=adresse_2))
assert c == 1
habite_schema = RelationSchema.objects.get(slug='habite')
errors = {}
enfant_ids = [enfant.id for enfant in enfants_communs]
adresse_principale_1 = request.data.get('adresse_principale_1', [])
adresse_principale_2 = request.data.get('adresse_principale_2', [])
if not isinstance(adresse_principale_1, list):
errors.setdefault('adresse_principale_1', []).append('is not a list of identifiers')
if not isinstance(adresse_principale_2, list):
errors.setdefault('adresse_principale_2', []).append('is not a list of identifiers')
errors = []
keys = ['enfant_%s' % enfant.id for enfant in enfants_communs]
for key in request.data:
if key not in keys:
errors[key] = ['clé inconnue']
for key in adresse_principale_1:
if key not in enfant_ids:
errors.setdefault('adresse_principale_1', []).append(
'l\'enfant %s n\'est pas commun' % key)
for key in adresse_principale_2:
if key not in enfant_ids:
errors.setdefault('adresse_principale_2', []).append(
'l\'enfant %s n\'est pas commun' % key)
if set(adresse_principale_1) & set(adresse_principale_2):
errors.setdefault('__all__', []).append('un enfant ne peut pas avoir deux adresses '
'principales')
for enfant in enfants_communs:
principale = request.data.get('enfant_%s' % enfant.id)
if principale not in [1, 2]:
errors['enfant_%s' % enfant.id] = ['valeur invalide']
if errors:
return Response({
'err': 1,
@ -784,6 +795,7 @@ class SeparationView(APIView):
assert c == 1
# crée la nouvelle relation 'habite' et pose le flag principale si demandé
habite_schema = RelationSchema.objects.get(slug='habite')
for enfant in enfants_communs:
rel_adresse_1 = Relation.objects.get(left=enfant, right=adresse_1)
@ -794,11 +806,10 @@ class SeparationView(APIView):
'principale': False,
})
principale = request.data.get('enfant_%s' % enfant.id)
if principale == 1:
if enfant.id in adresse_principale_1:
rel_adresse_1.content['principale'] = True
rel_adresse_1.save()
elif principale == 2:
elif enfant.id in adresse_principale_2:
rel_adresse_2.content['principale'] = True
rel_adresse_2.save()