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)