toulouse-maelis: normalize service referential (#86068)

This commit is contained in:
Nicolas Roche 2024-01-25 09:11:34 +01:00 committed by Nicolas Roche
parent 93c6224357
commit c3557f628a
2 changed files with 39 additions and 13 deletions

View File

@ -415,7 +415,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
self.trigger_subscriptions_cron()
self.update_referentials()
def get_referential(self, referential_name, id=None, q=None, limit=None, distinct=True):
def get_referential(self, referential_name, id=None, q=None, limit=None, distinct=True, **kwargs):
if id is not None:
queryset = self.referential.filter(referential_name=referential_name, item_id=id)
else:
@ -423,6 +423,9 @@ class ToulouseMaelis(BaseResource, HTTPResource):
if q:
queryset = queryset.filter(item_unaccent_text__icontains=simplify(q))
if kwargs:
queryset = queryset.filter(**kwargs)
if distinct:
queryset = queryset.distinct('resource', 'referential_name', 'item_text')
@ -1158,6 +1161,24 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def read_rl_indicator_list(self, request, id=None, q=None, limit=None, distinct=True):
return {'data': self.get_referential('RLIndicator')}
@endpoint(
display_category='Inscriptions',
description='Lister les services de la ville',
name='read-service-list',
parameters={
'id': {'description': 'Identifiant de lenregistrement'},
'q': {'description': 'Recherche en texte intégral'},
'limit': {'description': 'Nombre maximal de résultats; doit être inférieur à 20.'},
'distinct': {'description': 'Ne pas inclure les valeurs dupliquées'},
'direction_id': {'description': 'Numéro de la direction sur laquelle filtrer'},
},
)
def read_service_list(self, request, id=None, q=None, limit=None, distinct=True, direction_id=None):
kwargs = {}
if direction_id:
kwargs['item_data__idDir'] = direction_id
return {'data': self.get_referential('Service', id, q, limit, distinct, **kwargs)}
@endpoint(
display_category='Famille',
description='Lister les sexes',
@ -3342,18 +3363,6 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def read_direction_list(self, request):
return {'data': self.get_referential('Direct')}
@endpoint(
display_category='Inscriptions',
description='Lister les services de la ville',
name='read-service-list',
parameters={'direction_id': {'description': 'Numéro de la direction sur laquelle filtrer'}},
)
def read_service_list(self, request, direction_id=None):
queryset = self.referential.filter(referential_name='Service')
if direction_id:
queryset = queryset.filter(item_data__idDir=direction_id)
return {'data': [x.item_data for x in queryset]}
@endpoint(
display_category='Inscriptions',
description='Lister les indicateurs pour les activités petite enfance',

View File

@ -1348,6 +1348,23 @@ def test_read_service_list(con, app):
},
]
resp = app.get(url + '?id=A10049329043')
assert resp.json['data'] == [
{
'id': 'A10049329043',
'lib1': 'Accueil de loisirs',
'lib2': None,
'text': 'Accueil de loisirs',
'idDir': 'A10049327624',
'direction': {
'id': 'A10049327624',
'lib1': 'DEL',
'lib2': 'Direction enfance et loisirs',
'text': 'DEL',
},
}
]
resp = app.get(url + '?direction_id=A10049327624')
assert resp.json['data'] == [
{