ajout ws changement de situation maritale

This commit is contained in:
Benjamin Dauvergne 2017-03-17 16:56:22 +01:00
parent 40807a8bd4
commit 39742418c9
4 changed files with 90 additions and 17 deletions

View File

@ -260,3 +260,22 @@ def test_create_individu(app, rsu_schema):
assert response.json['err'] == 1
assert response.json['errors']['__all__'] == ['individu non mineur']
data = get_reseau(first_id)
assert data['union']
assert data['union_statut'] == 'mariage'
changement_de_situation_maritale_url = reverse('rsu-api-changement-de-situation-maritale',
kwargs={
'identifier': first_id
})
response = app.post_json(changement_de_situation_maritale_url, params={
'statut': 'pacs'
})
assert response.json['err'] == 0
data = get_reseau(first_id)
assert data['union']
assert data['union_statut'] == 'pacs'

View File

@ -610,3 +610,51 @@ class DeclarationAdressePrincipaleView(APIView):
})
declaration_adresse_principale = DeclarationAdressePrincipaleView.as_view()
class ChangementDeSituationMaritaleSerializer(serializers.Serializer):
statut = serializers.ChoiceField(
choices=['pacs', 'mariage', 'unionlibre'])
class ChangementDeSituationMaritaleView(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['statut_legal'] != 'majeur':
return Response({
'err': 1,
'errors': {
'__all__': ['individu non majeur'],
}
})
conjoint, conjoint_rel = utils.conjoint(individu)
if not conjoint:
return Response({
'err': 1,
'errors': {
'__all__': ["cet individu n'a pas actuellement de relation maritale"],
}
})
serializer = ChangementDeSituationMaritaleSerializer(data=request.data)
if not serializer.is_valid():
return Response({
'err': 1,
'errors': serializer.errors,
}, status=400)
if conjoint_rel.content['statut'] != serializer.validated_data['statut']:
conjoint_rel.content['statut'] = serializer.validated_data['statut']
conjoint_rel.save()
return Response({
'err': 0
})
changement_de_situation_maritale = ChangementDeSituationMaritaleView.as_view()

View File

@ -15,6 +15,9 @@ urlpatterns = [
url(r'^individu/(?P<identifier>\d+)/declaration-adresse-principale/$',
api_views.declaration_adresse_principale,
name='rsu-api-declaration-adresse-principale'),
url(r'^individu/(?P<identifier>\d+)/changement-de-situation-maritale/$',
api_views.changement_de_situation_maritale,
name='rsu-api-changement-de-situation-maritale'),
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'),

View File

@ -56,6 +56,20 @@ def age_in_years(born, today=None):
return age_in_years_and_months(born, today=today)[0]
def conjoint(individu):
for relation in individu.left_relations.all():
if relation.schema.slug != 'union':
continue
return relation.right, relation
for relation in individu.right_relations.all():
if relation.schema.slug != 'union':
continue
return relation.left, relation
return None, None
def enfants(individu):
for relation in individu.left_relations.all():
if relation.schema.slug != 'responsabilite-legale':
@ -309,23 +323,12 @@ class PersonSearch(object):
@classmethod
def add_union(cls, individu):
conjoint = None
for relation in individu.left_relations.all():
if relation.schema.slug != 'union':
continue
conjoint = relation.right
break
else:
for relation in individu.right_relations.all():
if relation.schema.slug != 'union':
continue
conjoint = relation.left
break
if conjoint:
cls.add_age(conjoint)
cls.add_federations(conjoint)
individu.union = conjoint
individu.union_statut = relation.content['statut']
con, conjoint_rel = conjoint(individu)
if con:
cls.add_age(con)
cls.add_federations(con)
individu.union = con
individu.union_statut = conjoint_rel.content['statut']
@classmethod
def add_federations(cls, individu):