nanterre: ajoute le ws suppression de lien de responsabilité

This commit is contained in:
Benjamin Dauvergne 2017-03-29 19:37:59 +02:00
parent c07efd8465
commit b28be23d6d
3 changed files with 83 additions and 0 deletions

View File

@ -186,7 +186,30 @@ def test_create_individu(app, rsu_schema):
assert response.json['err'] == 0
assert 'id' in response.json['data']
# détachement du premier enfant du premier adulte
suppression_responsabilite_url = reverse(
'rsu-api-suppression-lien-de-responsabilite',
kwargs={
'identifier': first_id,
'identifier_enfant': enfant_id
})
response = app.post_json(suppression_responsabilite_url)
assert response.json['err'] == 0
# ré-attachement du premier enfant au premier adulte
enfant_url = reverse('rsu-api-declaration-responsabilite-legale',
kwargs={'identifier': first_id})
response = app.post_json(enfant_url, params={
'statut': 'parent',
'enfant_id': enfant_id,
})
assert response.json['err'] == 0
assert 'id' in response.json['data']
# rattachement d'un deuxième enfant au deuxième adulte
enfant_url = reverse('rsu-api-declaration-responsabilite-legale',
kwargs={'identifier': second_id})
response = app.post_json(enfant_url, params={
'statut': 'parent',
'enfant': {

View File

@ -886,3 +886,59 @@ class DeclarationDeDecesView(APIView):
})
declaration_de_deces = DeclarationDeDecesView.as_view()
class SuppressionLienDeResponsabiliteView(APIView):
def post(self, request, identifier, identifier_enfant, 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)
enfant = get_object_or_404(qs, schema__slug='individu', id=identifier_enfant)
c = Relation.objects.filter(left=individu, right=enfant,
schema__slug='responsabilite-legale').count()
if not c:
return Response({
'err': 1,
'errors': {
'__all__': [u'cet adulte n\'a pas de responsabilité légale sur cet enfant'],
}
}, status=400)
c = Relation.objects.filter(
right=enfant,
schema__slug='responsabilite-legale').count()
if c < 2:
return Relation({
'err': 1,
'errors': {
'__all__': [u'cet enfant n\'a qu\'un responsable légal'],
}
}, status=400)
assert c == 2, 'only two links should exist'
Relation.objects.filter(left=individu, right=enfant,
schema__slug='responsabilite-legale').delete()
# suppression éventuelle de l'adresse commune entre l'enfant et l'adulte
# si elle n'appartient pas aussi à un autre adulte ayant des responsabilités
# légales sur le même enfant
adresse = utils.adresse(individu)
other_individu_ids = [rel.left_id for rel in
Relation.objects.filter(left__content__statut_legal='majeur',
right=adresse,
schema__slug='habite')]
if not Relation.objects.filter(left_id__in=other_individu_ids,
right=enfant,
schema__slug='responsabilite-legale').exists():
Relation.objects.filter(left=enfant, right=adresse).delete()
return Response({
'err': 0,
})
suppression_lien_de_responsabilite = SuppressionLienDeResponsabiliteView.as_view()

View File

@ -23,6 +23,10 @@ urlpatterns = [
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/(?P<identifier>\d+)/(?P<identifier_enfant>\d+)/'
'suppression-lien-de-responsabilite/$',
api_views.suppression_lien_de_responsabilite,
name='rsu-api-suppression-lien-de-responsabilite'),
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'),