toulouse-maelis: pouvoir listers les natures des activités auxquelles un enfant ou un RL est inscrit, par année scolaire (#75549) #161

Merged
nroche merged 1 commits from wip/75549-parsifal-add-year-nature-subscriptions into main 2023-03-30 09:59:52 +02:00
6 changed files with 43 additions and 9 deletions

View File

@ -322,6 +322,7 @@ def remove_id_on_child(conn, child):
del child['indicators'] # order may change
child['subscribeSchoolList'] = [] # not managed by test yet
child['subscribeActivityList'] = [] # not managed by test yet
del child['subscribe_natures'] # order may change
def remove_id_on_rlg(conn, rlg):
@ -332,6 +333,8 @@ def remove_id_on_rlg(conn, rlg):
rlg['indicatorList'].sort(key=lambda x: x['code'])
rlg['quotientList'].sort(key=lambda x: (x['yearRev'], x['dateStart']))
del rlg['indicators'] # order may change
rlg['subscribeActivityList'] = [] # not managed by test yet
del rlg['subscribe_natures'] # order may change
def remove_id_on_family(conn, family):

View File

@ -343,6 +343,25 @@ class ToulouseMaelis(BaseResource, HTTPResource):
result[item['id']] = item
data['indicators'] = result
def add_nature_subsciptions(self, data):
subscribe_natures = {}
for item in data['subscribeActivityList'] or []:
activity_type = item.get('typeActivity')
lguerin marked this conversation as resolved
Review

ça serait pas plutôt unit.get('dateEnd') ?

ça serait pas plutôt `unit.get('dateEnd')` ?
Review

Si, merci l'avoir vu !
Je n'ai pas complété les tests parce que bien que j'ai déjà rencontré ce cas d'une activité qui court sur plusieurs années scolaires, je pense qu'il s'agit d'une erreur de configuration (je n'ai pas eu de réponse à ce sujet).
J'ai testé à la main pour être sûr de ne rien avoir laissé passé d'autre ici. Dis-moi si tu préfères que je complète les tests.

Si, merci l'avoir vu ! Je n'ai pas complété les tests parce que bien que j'ai déjà rencontré ce cas d'une activité qui court sur plusieurs années scolaires, je pense qu'il s'agit d'une erreur de configuration (je n'ai pas eu de réponse à ce sujet). J'ai testé à la main pour être sûr de ne rien avoir laissé passé d'autre ici. Dis-moi si tu préfères que je complète les tests.
Review

Ca serait mieux avec un test plus complet, quand même :)

Ca serait mieux avec un test plus complet, quand même :)
Review

Fait (j'ai configuré la restauration scolaire sur 2 année).

Fait (j'ai configuré la restauration scolaire sur 2 année).
activity_nature = activity_type.get('natureSpec') if activity_type else None
if not activity_nature:
continue
for unit in item['subscribesUnit']:
start_year = utils.get_reference_year_from_date(unit.get('dateStart'))
end_year = utils.get_reference_year_from_date(unit.get('dateEnd'))
if not start_year or not end_year:
continue
for year in range(start_year, end_year + 1):
school_year = '%s-%s' % (year, year + 1)
if not subscribe_natures.get(school_year):
subscribe_natures[school_year] = set()
subscribe_natures[school_year].add(activity_nature['code'])
data['subscribe_natures'] = {x: sorted(list(y)) for x, y in subscribe_natures.items()}
def add_text_value_to_rl_indicator(self, data):
self.add_text_value('RLIndicator', data, ['code'])
@ -363,6 +382,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
for indicator in data['indicatorList']:
self.add_text_value_to_child_indicator(indicator)
self.add_indicators_field('ChildIndicator', data)
self.add_nature_subsciptions(data)
def add_text_value_to_person(self, data):
self.add_text_value('Civility', data, ['civility'])
@ -382,6 +402,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
for quotient in data['quotientList']:
self.add_text_value('Quotient', quotient, ['cdquo'])
self.add_indicators_field('RLIndicator', data)
self.add_nature_subsciptions(data)
def add_text_value_to_family(self, data):
self.add_text_value('Category', data, ['category'])

View File

@ -238,7 +238,7 @@
<libelle>RESTAURATION SCOLAIRE 22/23</libelle>
<bUniStd>true</bUniStd>
<dateStart>2023-03-01T00:00:00+01:00</dateStart>
<dateEnd>2023-07-07T00:00:00+02:00</dateEnd>
<dateEnd>2023-09-01T00:00:00+02:00</dateEnd>
</subscribesUnit>
<place>DUPONT PIERRE ELEMENTAIRE</place>
<planningHebdomadaire>0010011</planningHebdomadaire>

View File

@ -237,7 +237,7 @@
<libelle>RESTAURATION SCOLAIRE 22/23</libelle>
<bUniStd>true</bUniStd>
<dateStart>2023-03-01T00:00:00+01:00</dateStart>
<dateEnd>2023-07-07T00:00:00+02:00</dateEnd>
<dateEnd>2023-09-01T00:00:00+02:00</dateEnd>
</subscribesUnit>
<place>DUPONT PIERRE ELEMENTAIRE</place>
<planningHebdomadaire>0010011</planningHebdomadaire>

View File

@ -238,7 +238,7 @@
<libelle>RESTAURATION SCOLAIRE 22/23</libelle>
<bUniStd>true</bUniStd>
<dateStart>2023-03-01T00:00:00+01:00</dateStart>
<dateEnd>2023-07-07T00:00:00+02:00</dateEnd>
<dateEnd>2023-09-01T00:00:00+02:00</dateEnd>
</subscribesUnit>
<place>DUPONT PIERRE ELEMENTAIRE</place>
<planningHebdomadaire>0010011</planningHebdomadaire>

View File

@ -1321,6 +1321,7 @@ def test_read_family(family_service, xml, con, app):
},
],
'subscribeActivityList': [],
'subscribe_natures': {},
}
assert sorted(resp.json['data']['RL1']['indicatorList'], key=lambda x: x['code']) == [
{
@ -1380,6 +1381,7 @@ def test_read_family(family_service, xml, con, app):
del data['indicatorList']
del data['indicators']
del data['subscribeActivityList']
del data['subscribe_natures']
assert data == {
'num': '613880',
'lastname': 'DOE',
@ -1519,13 +1521,20 @@ def test_read_family(family_service, xml, con, app):
'note': None,
},
]
assert [x['libelle'] for x in resp.json['data']['childList'][0]['subscribeActivityList']] == [
'RESTAURATION SCOLAIRE 22/23',
'CLAE MIDI 22/23',
'CLAE MATIN 22/23',
'SEMST2 ADL MERC. ELEM Maourine 22/23',
'ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES',
assert [
(x['typeActivity']['natureSpec']['code'], x['libelle'])
for x in resp.json['data']['childList'][0]['subscribeActivityList']
] == [
('R', 'RESTAURATION SCOLAIRE 22/23'),
('A', 'CLAE MIDI 22/23'),
('A', 'CLAE MATIN 22/23'),
('X', 'SEMST2 ADL MERC. ELEM Maourine 22/23'),
('8', 'ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES'),
]
assert resp.json['data']['childList'][0]['subscribe_natures'] == {
'2022-2023': ['8', 'A', 'R', 'X'],
'2023-2024': ['R'],
}
def test_read_family_not_linked_error(con, app):
@ -1718,6 +1727,7 @@ def test_read_rl2(family_service, con, app):
'typeActivity': None,
}
],
'subscribe_natures': {},
}