toulouse-maelis: add endpoint to list school levels referential (#72737)
gitea-wip/passerelle/pipeline/pr-main This commit looks good Details

This commit is contained in:
Serghei Mihai 2023-01-02 10:36:14 +01:00
parent 8aba28ad29
commit 1535e83579
3 changed files with 185 additions and 2 deletions

View File

@ -150,9 +150,12 @@ class ToulouseMaelis(BaseResource, HTTPResource):
self.update_referential(referential_name, data, id_key, text_key)
def update_site_referentials(self):
for referential_name in ('YearSchool',):
for referential_name in ('YearSchool', 'Level'):
id_key, text_key = 'code', 'libelle'
data = self.get_referential_data('Site', referential_name)
self.update_referential(referential_name, data, 'schoolYear', 'schoolYear')
if referential_name == 'YearSchool':
id_key, text_key = 'schoolYear', 'schoolYear'
self.update_referential(referential_name, data, id_key, text_key)
def daily(self):
try:
@ -1665,6 +1668,21 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def read_school_years_list(self, request):
return {'data': self.get_referential('YearSchool')}
@endpoint(
display_category='Inscriptions',
description="Liste des niveaux scolaires",
name='read-school-levels-list',
perm='can_access',
parameters={
'age': {'description': 'Age de l\'enfant', 'example_value': '6'},
},
)
def read_school_levels_list(self, request, age=None):
data = self.get_referential('Level')
if age and age.isnumeric():
return {'data': [item for item in data if item.get('age') == int(age)]}
return {'data': data}
class Link(models.Model):
resource = models.ForeignKey(ToulouseMaelis, on_delete=models.CASCADE)

View File

@ -0,0 +1,144 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:readLevelListResponse xmlns:ns2="site.ws.maelis.sigec.com">
<levelList>
<code>TPS</code>
<libelle>Section tout petit</libelle>
<nature/>
<numOrder>1</numOrder>
<age>2</age>
<nextLevelCode>PS</nextLevelCode>
</levelList>
<levelList>
<code>PS</code>
<libelle>Section petit</libelle>
<nature/>
<numOrder>2</numOrder>
<age>3</age>
<nextLevelCode>MS</nextLevelCode>
</levelList>
<levelList>
<code>MS</code>
<libelle>Section moyen</libelle>
<nature/>
<numOrder>3</numOrder>
<age>4</age>
<nextLevelCode>GS</nextLevelCode>
</levelList>
<levelList>
<code>GS</code>
<libelle>Section grand</libelle>
<nature/>
<numOrder>4</numOrder>
<age>5</age>
<nextLevelCode>CP</nextLevelCode>
</levelList>
<levelList>
<code>CP</code>
<libelle>Cours préparatoire</libelle>
<nature/>
<numOrder>5</numOrder>
<age>6</age>
<nextLevelCode>CE1</nextLevelCode>
</levelList>
<levelList>
<code>CE1</code>
<libelle>Cours élémentaire 1</libelle>
<nature/>
<numOrder>6</numOrder>
<age>7</age>
<nextLevelCode>CE2</nextLevelCode>
</levelList>
<levelList>
<code>CE2</code>
<libelle>Cours élémentaire 2</libelle>
<nature/>
<numOrder>7</numOrder>
<age>8</age>
<nextLevelCode>CM1</nextLevelCode>
</levelList>
<levelList>
<code>CM1</code>
<libelle>Cours moyen 1</libelle>
<nature/>
<numOrder>8</numOrder>
<age>9</age>
<nextLevelCode>CM2</nextLevelCode>
</levelList><levelList>
<code>CM2</code>
<libelle>Cours moyen 2</libelle>
<nature/>
<numOrder>9</numOrder>
<age>10</age>
</levelList>
<levelList>
<code>CLA</code>
<libelle>Classe aide pédagogique ouvert</libelle>
</levelList>
<levelList>
<code>ADP</code>
<libelle>adaptation ouverte</libelle>
</levelList>
<levelList>
<code>STP</code>
<libelle>Section tout petit en REP</libelle>
<nature/>
</levelList>
<levelList>
<code>LYC</code>
<libelle>LYCEE</libelle>
<nature/>
</levelList>
<levelList>
<code>COL</code>
<libelle>COLLEGE</libelle>
<nature/>
</levelList>
<levelList>
<code>UPE</code>
<libelle>Uni Péda Elev Alloph Arrivants</libelle>
<nature/>
</levelList>
<levelList>
<code>UM </code>
<libelle>Unité mobile</libelle>
</levelList>
<levelList>
<code>DAN</code>
<libelle>Danse</libelle>
</levelList>
<levelList>
<code>OCC</code>
<libelle>Occitan</libelle>
</levelList>
<levelList>
<code>RAS</code>
<libelle>Réseau d'aide spécialisée</libelle>
</levelList>
<levelList>
<code>CLA</code>
<libelle>Classe aide pédagogique ouvert</libelle>
</levelList>
<levelList>
<code>INT</code>
<libelle>Initiation ouverte</libelle>
</levelList>
<levelList>
<code>ADP</code>
<libelle>Adaptation ouverte</libelle>
</levelList>
<levelList>
<code>CLI</code>
<libelle>Classe Initation ouverte</libelle>
<nature/>
</levelList>
<levelList>
<code>ULI</code>
<libelle>Unité d'inclusion scolaire</libelle>
</levelList>
<levelList>
<code>INT</code>
<libelle>Initiation</libelle>
</levelList>
</ns2:readLevelListResponse>
</soap:Body></soap:Envelope>

View File

@ -153,6 +153,7 @@ def django_db_setup(django_db_setup, django_db_blocker):
con.update_family_referentials()
with site_service() as site_mock:
site_mock.add_soap_response('readYearSchoolList', get_xml_file('R_read_year_school_list.xml'))
site_mock.add_soap_response('readLevelList', get_xml_file('R_read_level_list.xml'))
con.update_site_referentials()
# reset change in zeep private interface to bypass clear_cache fixture
@ -316,6 +317,7 @@ def test_cron(db):
'Country',
'DietCode',
'Document',
'Level',
'Organ',
'PAI',
'Quality',
@ -3665,3 +3667,22 @@ def test_read_school_year_list(con, app):
'dateEndSubscribeSchool': '2023-07-08T00:00:00+02:00',
},
]
def test_read_school_levels_list(con, app):
url = get_endpoint('read-school-levels-list')
resp = app.get(url)
assert resp.json['err'] == 0
assert len(resp.json['data']) == 22
for item in resp.json['data']:
assert 'id' in item
assert 'text' in item
resp = app.get(url, params={'age': '8'})
assert resp.json['err'] == 0
assert len(resp.json['data']) == 1
level = resp.json['data'][0]
assert level['id'] == 'CE2'
assert level['code'] == 'CE2'
assert level['text'] == 'Cours élémentaire 2'
assert level['libelle'] == 'Cours élémentaire 2'