ajout ws déclaration de décés

This commit is contained in:
Benjamin Dauvergne 2017-03-22 12:52:03 +01:00
parent e18ac08c0d
commit 7dc724da28
3 changed files with 96 additions and 0 deletions

View File

@ -353,3 +353,39 @@ def test_create_individu(app, rsu_schema):
right__right_relations__left=second_id).count() == 0
assert Relation.objects.filter(schema__slug='responsabilite-legale').count() == 3
assert Relation.objects.filter(schema__slug='union').count() == 0
deces_url = reverse('rsu-api-declaration-de-deces',
kwargs={
'identifier': second_id,
})
response = app.post_json(deces_url, params={
'date_de_deces': datetime.date.today().isoformat(),
})
assert response.json['err'] == 0
assert Entity.objects.filter(schema__slug='individu').count() == 4
assert Entity.objects.filter(schema__slug='adresse').count() == 2
assert Entity.objects.count() == 6
assert Relation.objects.filter(schema__slug='habite').count() == 3
# le deuxième enfant n'a plus de logement
assert Relation.objects.filter(
left=enfant_id_2, schema__slug='habite').count() == 0
# le premier adulte et le premier enfant partagent un logement
assert Relation.objects.filter(
left=first_id, right__right_relations__left=enfant_id).count() == 1
# le deuxième adulte et le premier enfant ne partagent plus de logement
assert Relation.objects.filter(
left=second_id, right__right_relations__left=enfant_id).count() == 0
# le deuxième adulte a un logment
assert Relation.objects.filter(
left=second_id, schema__slug='habite').count() == 1
# le premier et le deuxième adulte ne partagent plus de logement
assert Relation.objects.filter(
left=first_id,
right__right_relations__schema__slug='habite',
right__right_relations__left=second_id).count() == 0
assert Relation.objects.filter(schema__slug='responsabilite-legale').count() == 1
assert Relation.objects.filter(schema__slug='union').count() == 0
assert Relation.objects.count() == 4

View File

@ -814,3 +814,61 @@ class SeparationView(APIView):
})
separation = SeparationView.as_view()
class DeclarationDeDecesSerializer(serializers.Serializer):
date_de_deces = serializers.DateField()
class DeclarationDeDecesView(APIView):
def post(self, request, identifier, format=None):
qs = Entity.objects.prefetch_related(
'left_relations__schema', 'left_relations__right',
'right_relations__schema', 'right_relations__left',
)
individu = get_object_or_404(qs, schema__slug='individu', id=identifier)
if individu.content.get('date_de_deces'):
return Response({
'err': 1,
'errors': {
'__all__': ['individu déjà décédé'],
}
})
serializer = DeclarationDeDecesSerializer(data=request.data)
if not serializer.is_valid():
return Response({
'err': 1,
'errors': serializer.errors,
}, status=400)
# on stocke la date du décés
individu.content['date_de_deces'] = serializer.validated_data['date_de_deces'].isoformat()
individu.save()
# on supprime les relations
Relation.objects.filter(schema__slug='responsabilite-legale', left=individu).delete()
Relation.objects.filter(schema__slug='union', left=individu).delete()
Relation.objects.filter(schema__slug='union', right=individu).delete()
# si l'adresse est partagée avec un autre adulte on l'individualise
adresse = utils.adresse(individu)
if adresse.right_relations.filter(left__content__statut_legal='majeur').count() > 1:
new_adresse = copy.copy(adresse)
new_adresse.id = None
new_adresse.save()
assert new_adresse.id and new_adresse.id != adresse.id
c = Relation.objects.filter(schema__slug='habite', left=individu,
right=adresse).update(right=new_adresse)
assert c == 1
# si l'adresse n'est partagée qu'avec des enfants, on les débranche
else:
Relation.objects.filter(
schema__slug='habite', right=adresse).exclude(
left=individu).delete()
return Response({
'err': 0,
})
declaration_de_deces = DeclarationDeDecesView.as_view()

View File

@ -20,6 +20,8 @@ urlpatterns = [
name='rsu-api-changement-de-situation-maritale'),
url(r'^individu/(?P<identifier>\d+)/separation/$',
api_views.separation, name='rsu-api-separation'),
url(r'^individu/(?P<identifier>\d+)/declaration-de-deces/$',
api_views.declaration_de_deces, name='rsu-api-declaration-de-deces'),
url(r'^individu/$', api_views.create_individu, name='rsu-api-create-individu'),
url(r'^declaration-union/$', api_views.declaration_union,
name='rsu-api-declaration-union'),