diff --git a/passerelle/contrib/toulouse_maelis/models.py b/passerelle/contrib/toulouse_maelis/models.py index 434e1f6f..515ab643 100644 --- a/passerelle/contrib/toulouse_maelis/models.py +++ b/passerelle/contrib/toulouse_maelis/models.py @@ -594,16 +594,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, @@ -616,6 +622,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): @@ -2401,7 +2416,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': "Nature 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', @@ -2420,7 +2437,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, @@ -2436,12 +2453,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() @@ -2578,7 +2596,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': "Nature 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', @@ -2598,7 +2618,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, @@ -2612,7 +2632,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 8b4d3b6e..3f7fd119 100644 --- a/tests/test_toulouse_maelis.py +++ b/tests/test_toulouse_maelis.py @@ -5249,11 +5249,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': '', @@ -5347,6 +5349,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') @@ -5354,7 +5372,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': '', @@ -5371,7 +5389,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': '', @@ -5704,11 +5722,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', @@ -5828,6 +5848,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')