From 9f2457400da79ba784b91422edfe7635cf929600 Mon Sep 17 00:00:00 2001 From: Nicolas ROCHE Date: Fri, 24 Mar 2023 20:16:28 +0100 Subject: [PATCH] toulouse-maelis: get personnal catalogs for extra-sco and loisir (#75752) --- passerelle/contrib/toulouse_maelis/models.py | 36 +++++++++++++---- tests/test_toulouse_maelis.py | 41 ++++++++++++++++++-- 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/passerelle/contrib/toulouse_maelis/models.py b/passerelle/contrib/toulouse_maelis/models.py index bcc65b3c..4bb1f15b 100644 --- a/passerelle/contrib/toulouse_maelis/models.py +++ b/passerelle/contrib/toulouse_maelis/models.py @@ -567,16 +567,22 @@ class ToulouseMaelis(BaseResource, HTTPResource): self, family_id, person_id, - nature_id=None, + nature=None, type_ids=None, reference_year=None, start_date=None, end_date=None, ): + if str(nature).lower() == 'extrasco': + nature_filter_codes = self.get_extrasco_nature_codes() + elif str(nature).lower() == 'loisir': + nature_filter_codes = self.get_loisir_nature_codes() + else: + nature_filter_codes = None + params = { 'numDossier': family_id, 'numPerson': person_id, - 'codeNatureActivity': nature_id, 'yearSchool': reference_year, 'dateStartActivity': start_date, 'dateEndActivity': end_date, @@ -589,6 +595,15 @@ class ToulouseMaelis(BaseResource, HTTPResource): data['catalogueActivityList'] = [ a for a in data['catalogueActivityList'] if a['activity']['activityType']['code'] in codes ] + if nature_filter_codes: + activities = [] + for activity in data['catalogueActivityList']: + activity_type = activity['activity'].get('activityType') + activity_nature = activity_type.get('natureSpec') if activity_type else None + if not activity_nature or activity_nature['code'] not in nature_filter_codes: + continue + activities.append(activity) + data['catalogueActivityList'] = activities return data def get_baskets_raw(self, family_id): @@ -2372,7 +2387,9 @@ class ToulouseMaelis(BaseResource, HTTPResource): perm='can_access', parameters={ 'person_id': {'description': "Numéro du responsale légal ou de l'enfant"}, - 'nature_id': {'description': "Numéro de la nature des activités"}, + 'nature': { + 'description': "Natures des activités : EXTRASCO ou LOISIR (toutes par défaut)", + }, 'type_ids': { 'description': "Codes des types des activités, séparées par des virgules", 'example_value': 'EXTMERC,EXTVAC', @@ -2391,7 +2408,7 @@ class ToulouseMaelis(BaseResource, HTTPResource): person_id, NameID=None, family_id=None, - nature_id=None, + nature=None, type_ids=None, start_date=None, end_date=None, @@ -2407,12 +2424,13 @@ class ToulouseMaelis(BaseResource, HTTPResource): response = self.get_person_activity_list_raw( family_id, person_id, - nature_id=nature_id, + nature=nature, type_ids=type_ids, reference_year=reference_year, start_date=start_date and start_date.strftime(utils.json_date_format), end_date=start_date and end_date.strftime(utils.json_date_format), ) + for item in response['catalogueActivityList']: item['id'] = item['activity']['idActivity'] item['text'] = render_to_string(text_template, item).strip() @@ -2549,7 +2567,9 @@ class ToulouseMaelis(BaseResource, HTTPResource): 'NameID': {'description': 'Publik NameID'}, 'family_id': {'description': 'Numéro de DUI'}, 'person_id': {'description': "Numéro du responsale légal ou de l'enfant"}, - 'nature_id': {'description': "Numéro de la nature des activités"}, + 'nature': { + 'description': "Natures des activités : EXTRASCO ou LOISIR (toutes par défaut)", + }, 'type_ids': { 'description': "Codes des types des activités, séparées par des virgules", 'example_value': 'EXTMERC,EXTVAC', @@ -2569,7 +2589,7 @@ class ToulouseMaelis(BaseResource, HTTPResource): family_id=None, start_date=None, end_date=None, - nature_id=None, + nature=None, type_ids=None, activity_id=None, unit_id=None, @@ -2583,7 +2603,7 @@ class ToulouseMaelis(BaseResource, HTTPResource): response = self.get_person_activity_list_raw( family_id, person_id, - nature_id=nature_id, + nature=nature, type_ids=type_ids, reference_year=reference_year, start_date=start_date and start_date.strftime(utils.json_date_format), diff --git a/tests/test_toulouse_maelis.py b/tests/test_toulouse_maelis.py index 85f21b3d..637e014e 100644 --- a/tests/test_toulouse_maelis.py +++ b/tests/test_toulouse_maelis.py @@ -5181,11 +5181,13 @@ def test_get_person_activity_list(activity_service, con, app): ) url = get_endpoint('get-person-activity-list') + con.extrasco_nature_codes = 'V' + con.save() params = { 'NameID': '', 'family_id': '311323', 'person_id': '246423', - 'nature_id': '', + 'nature': '', 'start_date': '2022-09-01', 'end_date': '2023-08-31', 'text_template': '', @@ -5279,6 +5281,22 @@ def test_get_person_activity_list(activity_service, con, app): ('A10053187065', 'Vacances Hivers 2023'), ] + params['type_ids'] = '' + params['nature'] = 'LOISIR' + resp = app.get(url, params=params) + assert resp.json['err'] == 0 + assert [(x['id'], x['text']) for x in resp.json['data']] == [ + ('A10051141965', 'Activité modèle'), + ] + + params['nature'] = 'EXTRASCO' + resp = app.get(url, params=params) + assert resp.json['err'] == 0 + assert [(x['id'], x['text']) for x in resp.json['data']] == [ + ('A10053187087', 'Vacances Ete 2023'), + ('A10053187065', 'Vacances Hivers 2023'), + ] + def test_get_person_activity_list_not_linked_error(con, app): url = get_endpoint('get-person-activity-list') @@ -5286,7 +5304,7 @@ def test_get_person_activity_list_not_linked_error(con, app): 'NameID': 'local', 'family_id': '', 'person_id': '246423', - 'nature_id': '', + 'nature': '', 'start_date': '2022-09-01', 'end_date': '2023-08-31', 'text_template': '', @@ -5303,7 +5321,7 @@ def test_get_person_activity_list_date_error(con, app): 'NameID': '', 'family_id': '311323', 'person_id': '246423', - 'nature_id': '', + 'nature': '', 'start_date': 'bad', 'end_date': '2023-08-31', 'text_template': '', @@ -5636,11 +5654,13 @@ def test_get_person_catalog_geojson(activity_service, con, app): ) url = get_endpoint('get-person-catalog-geojson') + con.extrasco_nature_codes = 'V' + con.save() params = { 'NameID': '', 'family_id': '311323', 'person_id': '246423', - 'nature_id': '', + 'nature': '', 'start_date': '2022-09-01', 'end_date': '2023-08-31', 'activity_id': 'A10053187087', @@ -5760,6 +5780,19 @@ def test_get_person_catalog_geojson(activity_service, con, app): resp = app.get(url, params=params) assert len(resp.json['features']) == 0 + params['type_ids'] = '' + params['nature'] = 'EXTRASCO' + resp = app.get(url, params=params) + assert len(resp.json['features']) == 4 + assert [ + x['properties']['activity']['activity']['activityType']['natureSpec']['code'] + for x in resp.json['features'] + ] == ['V', 'V', 'V', 'V'] + + params['nature'] = 'LOISIR' + resp = app.get(url, params=params) + assert len(resp.json['features']) == 0 # no lon/lat + def test_get_person_catalog_geojson_not_linked_error(con, app): url = get_endpoint('get-person-catalog-geojson')