rsa13: add beneficiaire/sorti/csv endpoint (#67210)

This commit is contained in:
Benjamin Dauvergne 2022-07-10 11:43:37 +02:00
parent 7a04d9253f
commit 10103f9d45
2 changed files with 298 additions and 0 deletions

View File

@ -1936,3 +1936,84 @@ class RSA13Resource(BaseResource, HTTPResource):
for row in content.get('data') or []:
writer.writerow(str(row.get(name) or '') for name in names)
return response
BENEFICIAIRE_SORTI_CSV_COLUMN = [
"NUM_CAF",
"CODE_PER",
"NOM_PER",
"PRENOM_PER",
"DTNAI_PER",
"CP_PER",
"COMMUNE_PER",
"ACTIF_PER",
"CODE_PI",
"LIB_CODE_PI",
"TOPPERSDRODEVORSA",
"LIB_ETATDOSRSA",
"LIB_MOTIF_ETATDOSRSA",
"PLT_DT_DEB_AFF",
"PLT_DT_FIN_AFF",
"PLT_MOTIF_FIN_ACC",
"PLT_COMMENTAIRE_REF",
"PLT_NUM_CI",
"PLT_PLATEFORME_CI",
"PLT_OPERATEUR_CI",
"PLT_REFERENT_CI",
"PLT_DECISION_CI",
"PLT_DUREE_CI",
"PLT_DATE_DEB_CI",
"PLT_DATE_FIN_CI",
"NOUVEAU_DT_DEB_AFF",
"NOUVEAU_AFF",
"NOUVEAU_COMMENTAIRE_PI",
"NOUVEAU_NUM_CI",
"NOUVEAU_PLATEFORME_CI",
"NOUVEAU_OPERATEUR_CI",
"NOUVEAU_REFERENT_CI",
"NOUVEAU_DECISION_CI",
"NOUVEAU_DUREE_CI",
"NOUVEAU_DATE_DEB_CI",
"NOUVEAU_DATE_FIN_CI",
]
@endpoint(
name='platform',
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/sorti/csv/$',
example_pattern='{platform_id}/facturation/csv/',
description_get=_('Get platform beneficiaries removed in the last 90 days'),
perm='can_access',
parameters=parameters(
{
'platform_id': {
'description': _('Platform numeric identifier'),
'example_value': '11',
},
}
),
display_category=_('Platform'),
display_order=4.9,
)
def platform_beneficiaire_sorti_csv(
self,
request,
platform_id,
email,
ip=None,
):
url = 'platform/%s/beneficiaire/sorti/csv' % platform_id
content = self.get(url, email=email, ip=ip)
response = HttpResponse(content_type='text/csv')
date = now().strftime('%Y-%m-%d_%H:%M')
response['Content-Disposition'] = f'attachment; filename="beneficiaire-sorti-{date}.csv"'
# write Unicode BOM
response.write(b'\xef\xbb\xbf')
csv_columns = getattr(
settings, 'RSA13_BENEFICIAIRE_SORTI_CSV_COLUMNS', self.BENEFICIAIRE_SORTI_CSV_COLUMN
)
names = [col if isinstance(col, str) else col[0] for col in csv_columns]
titles = [col if isinstance(col, str) else col[1] for col in csv_columns]
writer = csv.writer(response, delimiter=';')
writer.writerow(titles)
for row in content.get('data') or []:
writer.writerow(str(row.get(name) or '') for name in names)
return response

View File

@ -1020,3 +1020,220 @@ def test_platform_facturation_csv(app, rsa13, url, settings):
'APDL MARTIGUES',
],
]
@mock_response(
[
'/api/platform/11/beneficiaire/sorti/csv',
{
"err": 0,
"data": [
{
"NUM_CAF": "372927",
"CODE_PER": 415443,
"NOM_PER": "DCFFEBABBDDCDEC",
"PRENOM_PER": "CBDACDCFEBBAA",
"DTNAI_PER": "1972-01-01",
"CP_PER": "13004",
"COMMUNE_PER": "MARSEILLE",
"ACTIF_PER": "Oui",
"CODE_PI": 53,
"LIB_CODE_PI": "Pôle d'insertion Marseille III",
"TOPPERSDRODEVORSA": "N",
"LIB_ETATDOSRSA": "Droit clos",
"LIB_MOTIF_ETATDOSRSA": "Clôture suite à échéance (4 mois sans droits)",
"PLT_DT_DEB_AFF": "2021-10-05",
"PLT_DT_FIN_AFF": "2022-06-13",
"PLT_MOTIF_FIN_ACC": None,
"PLT_COMMENTAIRE_REF": (
'29/11/2021 Mme présente au RDV, mais pas de CER car plus '
'de RSA. Titulaire d\'une pension d\'invalidité elle a un complément d\'ASI.\nE.CASTORI'
),
"PLT_NUM_CI": None,
"PLT_PLATEFORME_CI": None,
"PLT_OPERATEUR_CI": None,
"PLT_REFERENT_CI": " ",
"PLT_DECISION_CI": None,
"PLT_DUREE_CI": None,
"PLT_DATE_DEB_CI": None,
"PLT_DATE_FIN_CI": None,
"NOUVEAU_DT_DEB_AFF": "2022-06-13",
"NOUVEAU_AFF": "SORTIE",
"NOUVEAU_COMMENTAIRE_PI": None,
"NOUVEAU_NUM_CI": None,
"NOUVEAU_PLATEFORME_CI": None,
"NOUVEAU_OPERATEUR_CI": None,
"NOUVEAU_REFERENT_CI": None,
"NOUVEAU_DECISION_CI": None,
"NOUVEAU_DUREE_CI": None,
"NOUVEAU_DATE_DEB_CI": None,
"NOUVEAU_DATE_FIN_CI": None,
},
{
"NUM_CAF": "1677380",
"CODE_PER": 816754,
"NOM_PER": "EBBCAAFBDCCF",
"PRENOM_PER": "CCCADFBCBCEBCDCEBC",
"DTNAI_PER": "1956-01-01",
"CP_PER": "13012",
"COMMUNE_PER": "MARSEILLE 12",
"ACTIF_PER": "Oui",
"CODE_PI": 53,
"LIB_CODE_PI": "Pôle d'insertion Marseille III",
"TOPPERSDRODEVORSA": "N",
"LIB_ETATDOSRSA": "Droit clos",
"LIB_MOTIF_ETATDOSRSA": "Clôture suite à échéance (4 mois sans droits)",
"PLT_DT_DEB_AFF": "2021-10-15",
"PLT_DT_FIN_AFF": "2022-06-13",
"PLT_MOTIF_FIN_ACC": None,
"PLT_COMMENTAIRE_REF": None,
"PLT_NUM_CI": None,
"PLT_PLATEFORME_CI": None,
"PLT_OPERATEUR_CI": None,
"PLT_REFERENT_CI": " ",
"PLT_DECISION_CI": None,
"PLT_DUREE_CI": None,
"PLT_DATE_DEB_CI": None,
"PLT_DATE_FIN_CI": None,
"NOUVEAU_DT_DEB_AFF": "2022-06-13",
"NOUVEAU_AFF": "SORTIE",
"NOUVEAU_COMMENTAIRE_PI": None,
"NOUVEAU_NUM_CI": "16",
"NOUVEAU_PLATEFORME_CI": "CCO CANTINI",
"NOUVEAU_OPERATEUR_CI": "CCO",
"NOUVEAU_REFERENT_CI": "O BOBEUF",
"NOUVEAU_DECISION_CI": "Validé",
"NOUVEAU_DUREE_CI": "4",
"NOUVEAU_DATE_DEB_CI": "2021-10-18",
"NOUVEAU_DATE_FIN_CI": "2022-02-18",
},
],
},
],
)
def test_platform_beneficiaire_sorti_csv(app, rsa13, url, settings):
response = app.get(url + 'platform/11/beneficiaire/sorti/csv/')
stream = io.StringIO(response.content.decode('utf-8-sig'))
assert list(csv.reader(stream, delimiter=';')) == [
[
'NUM_CAF',
'CODE_PER',
'NOM_PER',
'PRENOM_PER',
'DTNAI_PER',
'CP_PER',
'COMMUNE_PER',
'ACTIF_PER',
'CODE_PI',
'LIB_CODE_PI',
'TOPPERSDRODEVORSA',
'LIB_ETATDOSRSA',
'LIB_MOTIF_ETATDOSRSA',
'PLT_DT_DEB_AFF',
'PLT_DT_FIN_AFF',
'PLT_MOTIF_FIN_ACC',
'PLT_COMMENTAIRE_REF',
'PLT_NUM_CI',
'PLT_PLATEFORME_CI',
'PLT_OPERATEUR_CI',
'PLT_REFERENT_CI',
'PLT_DECISION_CI',
'PLT_DUREE_CI',
'PLT_DATE_DEB_CI',
'PLT_DATE_FIN_CI',
'NOUVEAU_DT_DEB_AFF',
'NOUVEAU_AFF',
'NOUVEAU_COMMENTAIRE_PI',
'NOUVEAU_NUM_CI',
'NOUVEAU_PLATEFORME_CI',
'NOUVEAU_OPERATEUR_CI',
'NOUVEAU_REFERENT_CI',
'NOUVEAU_DECISION_CI',
'NOUVEAU_DUREE_CI',
'NOUVEAU_DATE_DEB_CI',
'NOUVEAU_DATE_FIN_CI',
],
[
'372927',
'415443',
'DCFFEBABBDDCDEC',
'CBDACDCFEBBAA',
'1972-01-01',
'13004',
'MARSEILLE',
'Oui',
'53',
"Pôle d'insertion Marseille III",
'N',
'Droit clos',
'Clôture suite à échéance (4 mois sans droits)',
'2021-10-05',
'2022-06-13',
'',
'29/11/2021 Mme présente au RDV, mais pas de CER car plus de RSA. Titulaire '
"d'une pension d'invalidité elle a un complément d'ASI.\n"
'E.CASTORI',
'',
'',
'',
' ',
'',
'',
'',
'',
'2022-06-13',
'SORTIE',
'',
'',
'',
'',
'',
'',
'',
'',
'',
],
[
'1677380',
'816754',
'EBBCAAFBDCCF',
'CCCADFBCBCEBCDCEBC',
'1956-01-01',
'13012',
'MARSEILLE 12',
'Oui',
'53',
"Pôle d'insertion Marseille III",
'N',
'Droit clos',
'Clôture suite à échéance (4 mois sans droits)',
'2021-10-15',
'2022-06-13',
'',
'',
'',
'',
'',
' ',
'',
'',
'',
'',
'2022-06-13',
'SORTIE',
'',
'16',
'CCO CANTINI',
'CCO',
'O BOBEUF',
'Validé',
'4',
'2021-10-18',
'2022-02-18',
],
]
settings.RSA13_BENEFICIAIRE_SORTI_CSV_COLUMNS = ['NUM_CAF']
response = app.get(url + 'platform/11/beneficiaire/sorti/csv/')
stream = io.StringIO(response.content.decode('utf-8-sig'))
assert list(csv.reader(stream, delimiter=';')) == [['NUM_CAF'], ['372927'], ['1677380']]