diff --git a/passerelle/contrib/toulouse_maelis/models.py b/passerelle/contrib/toulouse_maelis/models.py
index 38d7897b..30a0f77d 100644
--- a/passerelle/contrib/toulouse_maelis/models.py
+++ b/passerelle/contrib/toulouse_maelis/models.py
@@ -199,9 +199,11 @@ class ToulouseMaelis(BaseResource, HTTPResource):
)
def update_activity_referentials(self):
- for referential_name in ('ActivityNatureType',):
+ for referential_name in ('ActivityNatureType', 'Direct', 'Service'):
id_key, text_key = 'code', 'libelle'
data = self.get_referential_data('Activity', referential_name)
+ if referential_name in ['Direct', 'Service']:
+ id_key, text_key = 'id', 'lib1'
self.update_referential(referential_name, data, id_key, text_key)
# put activity catalog per year as referential
@@ -2819,6 +2821,28 @@ class ToulouseMaelis(BaseResource, HTTPResource):
groups[group['id']] = types
return {'data': data, 'meta': groups}
+ @endpoint(
+ display_category='Inscriptions',
+ description="Lister directions de la ville",
+ name='read-direction-list',
+ perm='can_access',
+ )
+ def read_direction_list(self, request):
+ return {'data': self.get_referential('Direct')}
+
+ @endpoint(
+ display_category='Inscriptions',
+ description="Lister services de la ville",
+ name='read-service-list',
+ perm='can_access',
+ 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",
diff --git a/tests/data/toulouse_maelis/R_read_direct_list.xml b/tests/data/toulouse_maelis/R_read_direct_list.xml
new file mode 100644
index 00000000..9e548ce2
--- /dev/null
+++ b/tests/data/toulouse_maelis/R_read_direct_list.xml
@@ -0,0 +1,56 @@
+
+
+
+
+ A10051141969
+ DSCS SENIORS
+ Direction des solidarités et de la cohésion sociale domaine
+
+
+ A10051141971
+ DSCS CS
+ Direction des solidarités et de la cohésion sociale centres
+
+
+ A10049327620
+ CCAS
+ Centre communal d'action social
+
+
+ A10049327621
+ DASC
+ Direction de l'action socioculturelle
+
+
+ A10049327622
+ DEPP
+ Direction de l'éducation prestations périscolaires
+
+
+ A10049327623
+ DE SICS
+ Direction éducation inscription et carte scolaire
+
+
+ A10049327624
+ DEL
+ Direction enfance et loisirs
+
+
+ A10049327625
+ DPE
+ Direction de la petite enfance
+
+
+ A10049327626
+ DSBL
+ Direction des sports et bases de loisirs
+
+
+ A10049327627
+ DSCS ACC JEUNES
+ Direction des solidarités et de la cohésion sociale accueil
+
+
+
+
diff --git a/tests/data/toulouse_maelis/R_read_service_list.xml b/tests/data/toulouse_maelis/R_read_service_list.xml
new file mode 100644
index 00000000..357143ec
--- /dev/null
+++ b/tests/data/toulouse_maelis/R_read_service_list.xml
@@ -0,0 +1,131 @@
+
+
+
+
+ A10049329048
+ Accueils jeunes et centres sociaux
+ A10049327627
+
+
+ A10049329049
+ Ateliers
+ A10049327621
+
+
+ A10049329042
+ CCAS
+ A10049327620
+
+
+ A10049329043
+ Accueil de loisirs
+ A10049327624
+
+
+ A10049329044
+ Convoyages
+ A10049327624
+
+
+ A10049329045
+ Séjours vacances
+ A10049327624
+
+
+ A10049329046
+ Sports et bases de loisirs
+ A10049327626
+
+
+ A10049329047
+ Séniors
+ A10049327627
+
+
+ A10049329050
+ Stages
+ A10049327621
+
+
+ A10049329051
+ Sorties
+ A10049327621
+
+
+ A10049329052
+ Sorties culturelles et urbaines
+ A10049327627
+
+
+ A10049329053
+ Festivités
+ A10049327627
+
+
+ A10049329054
+ Activités numériques
+ A10049327627
+
+
+ A10049329055
+ Restauration / portage
+ A10049327627
+
+
+ A10049327681
+ RESTAURATION SCOLAIRE
+ A10049327622
+
+
+ A10049327685
+ CLAE
+ A10049327622
+
+
+ A10049327695
+ PARCOURS URBAIN
+ A10049327622
+
+
+ A10049327705
+ GARDERIE
+ A10049327622
+
+
+ A10054639474
+ Structure Hors CApAJE (EPE, LAEP, ASSO...)
+ A10049327625
+
+
+ A10054639473
+ Structure CApAJE (EAJE hors mairie)
+ A10049327625
+
+
+ A10051143887
+ DE SICS
+ A10049327623
+
+
+ A10051143888
+ DSCS CS
+ A10051141971
+
+
+ A10051143889
+ DSCS SENIORS
+ A10051141969
+
+
+ A10049328220
+ CLASSE DECOUVERTE
+ A10049327622
+
+
+ A10049328224
+ Direction Petite Enfance (EAJE mairie)
+ A10049327625
+
+
+
+
diff --git a/tests/test_toulouse_maelis.py b/tests/test_toulouse_maelis.py
index 1641683f..1c1aa98c 100644
--- a/tests/test_toulouse_maelis.py
+++ b/tests/test_toulouse_maelis.py
@@ -215,6 +215,10 @@ def django_db_setup(django_db_setup, django_db_blocker):
activity_mock.add_soap_response(
'readActivityList', get_xml_file('R_read_activity_list.xml')
)
+ activity_mock.add_soap_response('readDirectList', get_xml_file('R_read_direct_list.xml'))
+ activity_mock.add_soap_response(
+ 'readServiceList', get_xml_file('R_read_service_list.xml')
+ )
con.update_activity_referentials()
with ape_service() as ape_mock:
@@ -482,6 +486,7 @@ def test_cron(db):
'Country',
'DerogReason',
'DietCode',
+ 'Direct',
'Document',
'Level',
'Nursery',
@@ -492,6 +497,7 @@ def test_cron(db):
'Quotient',
'RLIndicator',
'Regie',
+ 'Service',
'Sex',
'Situation',
'Street',
@@ -675,6 +681,35 @@ def test_read_csp_list(con, app):
]
+def test_read_direct_list(con, app):
+ url = get_endpoint('read-direction-list')
+ resp = app.get(url)
+ assert resp.json['err'] == 0
+ assert len(resp.json['data']) == 10
+ assert resp.json['data'][:5] == [
+ {'id': 'A10049327620', 'lib1': 'CCAS', 'lib2': "Centre communal d'action social", 'text': 'CCAS'},
+ {
+ 'id': 'A10049327621',
+ 'lib1': 'DASC',
+ 'lib2': "Direction de l'action socioculturelle",
+ 'text': 'DASC',
+ },
+ {'id': 'A10049327624', 'lib1': 'DEL', 'lib2': 'Direction enfance et loisirs', 'text': 'DEL'},
+ {
+ 'id': 'A10049327622',
+ 'lib1': 'DEPP',
+ 'lib2': "Direction de l'éducation prestations périscolaires",
+ 'text': 'DEPP',
+ },
+ {
+ 'id': 'A10049327623',
+ 'lib1': 'DE SICS',
+ 'lib2': 'Direction éducation inscription et carte scolaire',
+ 'text': 'DE SICS',
+ },
+ ]
+
+
def test_read_dietcode_list(con, app):
url = get_endpoint('read-dietcode-list')
resp = app.get(url)
@@ -849,6 +884,63 @@ def test_read_rl_indicator_list(con, app):
]
+def test_read_service_list(con, app):
+ url = get_endpoint('read-service-list')
+ resp = app.get(url)
+ assert resp.json['err'] == 0
+ assert len(resp.json['data']) == 25
+ assert resp.json['data'][:5] == [
+ {
+ 'id': 'A10049329043',
+ 'lib1': 'Accueil de loisirs',
+ 'lib2': None,
+ 'text': 'Accueil de loisirs',
+ 'idDir': 'A10049327624',
+ },
+ {
+ 'id': 'A10049329048',
+ 'lib1': 'Accueils jeunes et centres sociaux',
+ 'lib2': None,
+ 'text': 'Accueils jeunes et centres sociaux',
+ 'idDir': 'A10049327627',
+ },
+ {
+ 'id': 'A10049329054',
+ 'lib1': 'Activités numériques',
+ 'lib2': None,
+ 'text': 'Activités numériques',
+ 'idDir': 'A10049327627',
+ },
+ {'id': 'A10049329049', 'lib1': 'Ateliers', 'lib2': None, 'text': 'Ateliers', 'idDir': 'A10049327621'},
+ {'id': 'A10049329042', 'lib1': 'CCAS', 'lib2': None, 'text': 'CCAS', 'idDir': 'A10049327620'},
+ ]
+
+ resp = app.get(url + '?direction_id=A10049327624')
+ assert resp.json['data'] == [
+ {
+ 'id': 'A10049329043',
+ 'lib1': 'Accueil de loisirs',
+ 'lib2': None,
+ 'text': 'Accueil de loisirs',
+ 'idDir': 'A10049327624',
+ },
+ {
+ 'id': 'A10049329044',
+ 'lib1': 'Convoyages',
+ 'lib2': None,
+ 'text': 'Convoyages',
+ 'idDir': 'A10049327624',
+ },
+ {
+ 'id': 'A10049329045',
+ 'lib1': 'Séjours vacances',
+ 'lib2': None,
+ 'text': 'Séjours vacances',
+ 'idDir': 'A10049327624',
+ },
+ ]
+
+
def test_read_sex_list(con, app):
url = get_endpoint('read-sex-list')
resp = app.get(url)