From 96c16afd0499c61074b826c81444f5fcb0f984a1 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 28 May 2019 14:38:54 +0200 Subject: [PATCH] atos_genesys: filter call_cherche_beneficiaire results (#33492) Also remove non digit from phon numbers. --- passerelle/apps/atos_genesys/models.py | 40 ++++++++++++++++++++------ tests/test_atos_genesys.py | 3 +- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/passerelle/apps/atos_genesys/models.py b/passerelle/apps/atos_genesys/models.py index 5b4f0ae8..74d7e704 100644 --- a/passerelle/apps/atos_genesys/models.py +++ b/passerelle/apps/atos_genesys/models.py @@ -363,24 +363,46 @@ class Resource(BaseResource, HTTPResource): }) def search(self, request, first_name, last_name, date_of_birth): try: - date_of_birth = datetime.datetime.strptime(date_of_birth, '%Y-%m-%d') + date_of_birth = datetime.datetime.strptime(date_of_birth, '%Y-%m-%d').date() except (ValueError, TypeError): raise APIError('invalid date_of_birth: %r' % date_of_birth) beneficiaires = self.call_cherche_beneficiaire( prenom=first_name, nom=last_name, dob=date_of_birth) + response = {'data': []} for beneficiaire in beneficiaires: - ref_per = beneficiaire.get('REF_PER') - if not ref_per: + id_per = beneficiaire.get('ID_PER') + if not id_per: + self.logger.warning('no ID_PER') continue - dossier = self.call_select_usager_by_ref(ref_per) - identification = dossier['IDENTIFICATION'][0] - beneficiaire['ID_PER'] = identification['ID_PER'] - beneficiaire['TEL_FIXE'] = identification.get('TEL_FIXE', '') - beneficiaire['TEL_MOBILE'] = identification.get('TEL_MOBILE', '') + try: + dob = beneficiaire['DATE_NAISSANCE'] + except KeyError: + self.logger.warning('id_per %s: no DATE_NAISSANCE', id_per) + continue + try: + dob = datetime.datetime.strptime(dob, '%d/%m/%Y').date() + except (ValueError, TypeError): + self.logger.warning('id_per %s: invalid DATE_NAISSANCE', id_per) + continue + if dob != date_of_birth: + self.logger.debug('ignoring id_per %s different dob %s != %s', id_per, dob, date_of_birth) + continue + dossier = self.call_select_usager(id_per) + try: + identification = dossier['IDENTIFICATION'][0] + except KeyError: + self.logger.warning('id_per %s: dossier is empty', id_per) + continue + assert identification['ID_PER'] == id_per + beneficiaire['TEL_MOBILE'] = ''.join(c for c in identification.get('TEL_MOBILE', '') if c.isdigit()) beneficiaire['MAIL'] = identification.get('MAIL', '') - return {'data': beneficiaires} + if not (beneficiaire['TEL_MOBILE'] or beneficiaire['MAIL']): + self.logger.debug('id_per %s: no contact information, ignored', id_per) + continue + response['data'].append(beneficiaire) + return response @endpoint(name='link-by-id-per', methods=['post'], diff --git a/tests/test_atos_genesys.py b/tests/test_atos_genesys.py index d9abda5c..bb9b1969 100644 --- a/tests/test_atos_genesys.py +++ b/tests/test_atos_genesys.py @@ -243,12 +243,13 @@ def test_ws_search(app, genesys): 951858 ANTIBES (006) FRANCE + 1234 ''' with utils.mock_url(FAKE_URL + 'WSUsagerPublik/services/PublikService/chercheBeneficiaire', RESPONSE_SEARCH): - with utils.mock_url(FAKE_URL + 'WSUsagerPublik/services/PublikService/selectUsagerByRef', + with utils.mock_url(FAKE_URL + 'WSUsagerPublik/services/PublikService/selectUsager', RESPONSE_SELECT_USAGER): response = app.get(url + '?' + urlencode({ 'first_name': 'John', -- 2.20.1