From 6210cf3fa3836cbd62d2fe2a2c6f76c9735d77b9 Mon Sep 17 00:00:00 2001 From: Nicolas ROCHE Date: Wed, 15 Mar 2023 15:01:05 +0100 Subject: [PATCH 1/2] toulouse-maelis: add endpoint to get RLs and childs data (#75455) --- passerelle/contrib/toulouse_maelis/models.py | 46 ++++++++++++++++++++ tests/test_toulouse_maelis.py | 42 ++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/passerelle/contrib/toulouse_maelis/models.py b/passerelle/contrib/toulouse_maelis/models.py index 47c09efc..1313d7a3 100644 --- a/passerelle/contrib/toulouse_maelis/models.py +++ b/passerelle/contrib/toulouse_maelis/models.py @@ -1032,6 +1032,52 @@ class ToulouseMaelis(BaseResource, HTTPResource): data.append(item) return {'data': data} + @endpoint( + display_category='Famille', + description="Lister les enfants et les responsables légaux", + perm='can_access', + name='read-rl-and-child-list', + parameters={ + 'NameID': {'description': 'Publik NameID'}, + 'family_id': {'description': 'Numéro de DUI'}, + 'rl_text_template': { + 'description': 'Gabarit utilisé pour la valeur text', + 'example_value': '{{ lastname }} {{ firstname }}', + }, + 'child_text_template': { + 'description': 'Gabarit utilisé pour la valeur text', + 'example_value': '{{ lastname }} {{ firstname }}', + }, + }, + ) + def read_rl_and_child_list( + self, request, NameID=None, family_id=None, rl_text_template=None, child_text_template=None + ): + family_id = family_id or self.get_link(NameID).family_id + result = self.get_family_raw(family_id) + if not rl_text_template: + rl_text_template = '{{ lastname }} {{ firstname }}' + if not child_text_template: + child_text_template = '{{ lastname }} {{ firstname }}' + + data = [] + for rlg in 'RL1', 'RL2': + item = result.get(rlg) + if not item: + break + self.add_text_value_to_rl(item) + item['id'] = item['num'] + item['text'] = render_to_string(rl_text_template, item).strip() + item['family_id'] = family_id + data.append(item) + for item in result['childList']: + self.add_text_value_to_child(item) + item['id'] = item['num'] + item['text'] = render_to_string(child_text_template, item).strip() + item['family_id'] = family_id + data.append(item) + return {'data': data} + @endpoint( display_category='Famille', description="Lister les personnes autorisées à récupérer l'enfant", diff --git a/tests/test_toulouse_maelis.py b/tests/test_toulouse_maelis.py index 46242bc6..1e8b9990 100644 --- a/tests/test_toulouse_maelis.py +++ b/tests/test_toulouse_maelis.py @@ -918,6 +918,48 @@ def test_read_rl_list_not_linked_error(con, app): assert resp.json['err_desc'] == 'User not linked to family' +def test_read_rl_and_child_list(family_service, con, app): + family_service.add_soap_response('readFamily', get_xml_file('R_read_family.xml')) + url = get_endpoint('read-rl-and-child-list') + + resp = app.get(url + '?family_id=1312') + assert resp.json['err'] == 0 + Link.objects.create(resource=con, family_id='1312', name_id='local') + + resp = app.get(url + '?NameID=local') + assert resp.json['err'] == 0 + assert [(x['id'], x['text']) for x in resp.json['data']] == [ + ('613878', 'DOE JHON'), + ('613879', 'DOE JANE'), + ('613880', 'DOE JANNIS'), + ('613987', 'DOE JOHNNY ALLEN'), + ('614051', 'DOE ROBERT'), + ] + + params = { + 'NameID': 'local', + 'rl_text_template': 'RL {{ firstname }}, {{ birth.dateBirth|date:"d/m/Y" }}', + 'child_text_template': 'Child {{ firstname }}, {{ birth.dateBirth|date:"d/m/Y" }}', + } + resp = app.get(url, params=params) + assert resp.json['err'] == 0 + assert [(x['id'], x['text']) for x in resp.json['data']] == [ + ('613878', 'RL JHON, 25/07/1938'), + ('613879', 'RL JANE, 21/06/1940'), + ('613880', 'Child JANNIS, 18/01/1943'), + ('613987', 'Child JOHNNY ALLEN, 26/11/1942'), + ('614051', 'Child ROBERT, 23/05/1941'), + ] + + +def test_read_rl_and_child_list_not_linked_error(con, app): + url = get_endpoint('read-rl-list') + + resp = app.get(url + '?NameID=local') + assert resp.json['err'] == 1 + assert resp.json['err_desc'] == 'User not linked to family' + + def test_read_person_list(family_service, con, app): family_service.add_soap_response('readFamily', get_xml_file('R_read_family.xml')) url = get_endpoint('read-person-list') -- 2.39.2 From 9676943a0dc17b4d5fcb20ab22a355ec20a9e031 Mon Sep 17 00:00:00 2001 From: Nicolas ROCHE Date: Wed, 15 Mar 2023 15:24:51 +0100 Subject: [PATCH 2/2] toulouse-maelis: factorize childs and RLs data (#75455) --- passerelle/contrib/toulouse_maelis/models.py | 83 ++++++++------------ 1 file changed, 33 insertions(+), 50 deletions(-) diff --git a/passerelle/contrib/toulouse_maelis/models.py b/passerelle/contrib/toulouse_maelis/models.py index 1313d7a3..93a40580 100644 --- a/passerelle/contrib/toulouse_maelis/models.py +++ b/passerelle/contrib/toulouse_maelis/models.py @@ -539,6 +539,33 @@ class ToulouseMaelis(BaseResource, HTTPResource): if value is None: dico[key] = '' + def read_rl_list_raw(self, family_id, text_template=None, income_year=None): + result = self.get_family_raw(family_id, incomeYear=income_year) + if not text_template: + text_template = '{{ lastname }} {{ firstname }}' + + for rlg in 'RL1', 'RL2': + item = result.get(rlg) + if not item: + break + self.add_text_value_to_rl(item) + item['id'] = item['num'] + item['text'] = render_to_string(text_template, item).strip() + item['family_id'] = family_id + yield item + + def read_child_list_raw(self, family_id, text_template=None): + result = self.get_family_raw(family_id) + if not text_template: + text_template = '{{ lastname }} {{ firstname }}' + + for item in result['childList']: + self.add_text_value_to_child(item) + item['id'] = item['num'] + item['text'] = render_to_string(text_template, item).strip() + item['family_id'] = family_id + yield item + def get_person_activity_list_raw( self, family_id, @@ -958,21 +985,7 @@ class ToulouseMaelis(BaseResource, HTTPResource): ) def read_rl_list(self, request, NameID=None, family_id=None, text_template=None, income_year=None): family_id = family_id or self.get_link(NameID).family_id - result = self.get_family_raw(family_id, incomeYear=income_year) - if not text_template: - text_template = '{{ lastname }} {{ firstname }}' - - data = [] - for rlg in 'RL1', 'RL2': - item = result.get(rlg) - if not item: - break - self.add_text_value_to_rl(item) - item['id'] = item['num'] - item['text'] = render_to_string(text_template, item).strip() - item['family_id'] = family_id - data.append(item) - return {'data': data} + return {'data': list(self.read_rl_list_raw(family_id, text_template))} @endpoint( display_category='Famille', @@ -1019,18 +1032,7 @@ class ToulouseMaelis(BaseResource, HTTPResource): ) def read_child_list(self, request, NameID=None, family_id=None, text_template=None): family_id = family_id or self.get_link(NameID).family_id - result = self.get_family_raw(family_id) - if not text_template: - text_template = '{{ lastname }} {{ firstname }}' - - data = [] - for item in result['childList']: - self.add_text_value_to_child(item) - item['id'] = item['num'] - item['text'] = render_to_string(text_template, item).strip() - item['family_id'] = family_id - data.append(item) - return {'data': data} + return {'data': list(self.read_child_list_raw(family_id, text_template))} @endpoint( display_category='Famille', @@ -1054,29 +1056,10 @@ class ToulouseMaelis(BaseResource, HTTPResource): self, request, NameID=None, family_id=None, rl_text_template=None, child_text_template=None ): family_id = family_id or self.get_link(NameID).family_id - result = self.get_family_raw(family_id) - if not rl_text_template: - rl_text_template = '{{ lastname }} {{ firstname }}' - if not child_text_template: - child_text_template = '{{ lastname }} {{ firstname }}' - - data = [] - for rlg in 'RL1', 'RL2': - item = result.get(rlg) - if not item: - break - self.add_text_value_to_rl(item) - item['id'] = item['num'] - item['text'] = render_to_string(rl_text_template, item).strip() - item['family_id'] = family_id - data.append(item) - for item in result['childList']: - self.add_text_value_to_child(item) - item['id'] = item['num'] - item['text'] = render_to_string(child_text_template, item).strip() - item['family_id'] = family_id - data.append(item) - return {'data': data} + return { + 'data': list(self.read_rl_list_raw(family_id, rl_text_template)) + + list(self.read_child_list_raw(family_id, child_text_template)) + } @endpoint( display_category='Famille', -- 2.39.2