toulouse-maelis: display read-only extra-sco activities in child calendar (#75144)
gitea/passerelle/pipeline/head This commit looks good Details

This commit is contained in:
Nicolas Roche 2023-03-19 10:21:29 +01:00
parent 3cddb32080
commit 2e85f7e013
3 changed files with 592 additions and 3 deletions

View File

@ -1813,7 +1813,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
activity = schedule['activity']
if not activity['activityType']['natureSpec']:
continue
if activity['activityType']['natureSpec']['code'] not in ['A', 'R']:
if activity['activityType']['natureSpec']['code'] not in ['A', 'R', 'X']:
continue
activity_id = activity['idAct']
many_units = len(schedule['unitScheduleList']) > 1
@ -1827,7 +1827,10 @@ class ToulouseMaelis(BaseResource, HTTPResource):
% (child_id, activity_id, day['day'].strftime(utils.json_date_format)),
'text': dateformat.format(day['day'], 'l j F Y'),
'prefill': day['scheduledPresence'] > 0 or day['realPresence'] > 1,
'disabled': day['status'] != 'WRITABLE',
'disabled': (
day['status'] != 'WRITABLE'
or activity['activityType']['natureSpec']['code'] in ['X']
),
'details': day,
}
color = 'white'
@ -1836,7 +1839,12 @@ class ToulouseMaelis(BaseResource, HTTPResource):
booking['details']['status_color'] = color
booking['details']['activity_id'] = activity_id
booking['details']['activity_type'] = activity['activityType']['code']
booking['details']['activity_label'] = activity['activityType']['libelle']
if activity['activityType']['natureSpec']['code'] in ['A', 'R']:
booking['details']['activity_label'] = activity['activityType']['libelle']
else:
booking['details']['activity_label'] = (
activity['libelle2'] or activity['libelle']
)
if many_units:
booking['details']['activity_label'] += ' (%s)' % unit['unit']['libelle']
booking['details']['child_id'] = child_id

View File

@ -0,0 +1,508 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getPersonScheduleListResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns4="bean.persistence.school.ws.maelis.sigec.com">
<resultBean>
<personScheduleList>
<person>
<numPerson>261768</numPerson>
<lastname>NICO</lastname>
<firstname>BART</firstname>
</person>
<activityScheduleList>
<activity>
<idAct>A10049327689</idAct>
<libelle>CLAE MATIN 22/23</libelle>
<activityType>
<code>ACCMAT</code>
<libelle>Accueil du matin</libelle>
<natureSpec>
<code>A</code>
<libelle>Accueil Périscolaire</libelle>
</natureSpec>
</activityType>
</activity>
<weeklyCalendar>
<yearCalendar>2023</yearCalendar>
<dayWeekInfoList>
<dayNum>1</dayNum>
<isOpen>true</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>2</dayNum>
<isOpen>true</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>3</dayNum>
<isOpen>false</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>4</dayNum>
<isOpen>true</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>5</dayNum>
<isOpen>true</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>6</dayNum>
<isOpen>false</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>7</dayNum>
<isOpen>false</isOpen>
</dayWeekInfoList>
</weeklyCalendar>
<unitScheduleList>
<unit>
<idUnit>A10049327690</idUnit>
<libelle>CLAE MATIN 22/23</libelle>
<calendarLetter>X</calendarLetter>
</unit>
<dayInfoList>
<day>2023-05-01T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-02T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-03T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-04T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-05T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-06T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-07T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-08T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-09T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-10T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-11T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-12T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-13T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-14T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-15T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-16T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-17T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-18T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-19T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-20T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-21T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-22T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-23T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-24T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-25T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-26T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-27T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-28T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-29T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-30T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-31T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
</unitScheduleList>
</activityScheduleList>
<activityScheduleList>
<activity>
<idAct>A10049354913</idAct>
<libelle>SEMST2 ADL MERC. ELEM Maourine 22/23</libelle>
<activityType>
<code>EXTMERC</code>
<libelle>Mercredi</libelle>
<natureSpec>
<code>X</code>
<libelle>Extrascolaire</libelle>
</natureSpec>
</activityType>
</activity>
<weeklyCalendar>
<yearCalendar>2023</yearCalendar>
<dayWeekInfoList>
<dayNum>1</dayNum>
<isOpen>false</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>2</dayNum>
<isOpen>false</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>3</dayNum>
<isOpen>true</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>4</dayNum>
<isOpen>false</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>5</dayNum>
<isOpen>false</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>6</dayNum>
<isOpen>false</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>7</dayNum>
<isOpen>false</isOpen>
</dayWeekInfoList>
</weeklyCalendar>
<unitScheduleList>
<unit>
<idUnit>A10049354915</idUnit>
<libelle>SEMST2 ADL MERC. ELEM Maourine 22/23</libelle>
<calendarLetter>X</calendarLetter>
</unit>
<dayInfoList>
<day>2023-05-01T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-02T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-03T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-04T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-05T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-06T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-07T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-08T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-09T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-10T00:00:00+02:00</day>
<scheduledPresence>1</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>DEL_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-11T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-12T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-13T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-14T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-15T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-16T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-17T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
<dayInfoList>
<day>2023-05-18T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-19T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-20T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-21T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-22T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-23T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-24T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>READ_ONLY</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-25T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-26T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-27T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-28T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-29T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-30T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>NO_READ</ns3:status>
</dayInfoList>
<dayInfoList>
<day>2023-05-31T00:00:00+02:00</day>
<scheduledPresence>0</scheduledPresence>
<realPresence>0</realPresence>
<ns3:status>WRITABLE</ns3:status>
<ns3:action>ADD_PRES_PREVI</ns3:action>
</dayInfoList>
</unitScheduleList>
</activityScheduleList>
</personScheduleList>
</resultBean>
</ns2:getPersonScheduleListResponse>
</soap:Body>
</soap:Envelope>

View File

@ -4495,6 +4495,79 @@ def test_read_child_agenda_multi_units(activity_service, con, app):
]
def test_read_child_agenda_with_activity(activity_service, con, app):
activity_service.add_soap_response(
'getPersonScheduleList', get_xml_file('R_get_person_schedule_list_with_activity.xml')
)
url = get_endpoint('read-child-agenda')
resp = app.get(url + '?family_id=1312&child_id=322423&start_date=2023-05-01&end_date=2023-05-31')
assert resp.json['err'] == 0
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.get(url + '?NameID=local&child_id=322423&start_date=2023-05-01&end_date=2023-05-31')
assert resp.json['err'] == 0
assert resp.json['extra_data'] == {
'start_date': '2023-05-01',
'end_date': '2023-05-31',
'school_year': '2022/2023',
}
assert len(resp.json['data']) == 18
# extra-sco bookings ('X' nature) are displayed but disabled
extra_sco_bookings = [x for x in resp.json['data'] if x['details']['activity_type'] == 'EXTMERC']
assert len([x for x in extra_sco_bookings if x['details']['status'] == 'WRITABLE']) == 3
assert all([x['disabled'] for x in extra_sco_bookings])
assert resp.json['data'][4:6] == [
{
'id': '322423:A10049354913:2023-05-10',
'text': 'Wednesday 10 May 2023',
'prefill': True,
'disabled': True, # disabled
'details': {
'day': '2023-05-10T00:00:00+02:00',
'scheduledPresence': 1,
'realPresence': 0,
'status': 'WRITABLE',
'action': 'DEL_PRES_PREVI',
'hasPlace': None,
'absence': None,
'status_color': 'green',
'activity_id': 'A10049354913',
'activity_type': 'EXTMERC',
'activity_label': 'SEMST2 ADL MERC. ELEM Maourine 22/23',
'child_id': '322423',
'day_str': '2023-05-10',
'unit_id': 'A10049354915',
},
},
{
'id': '322423:A10049327689:2023-05-11',
'text': 'Thursday 11 May 2023',
'prefill': False,
'disabled': False,
'details': {
'day': '2023-05-11T00:00:00+02:00',
'scheduledPresence': 0,
'realPresence': 0,
'status': 'WRITABLE',
'action': 'ADD_PRES_PREVI',
'hasPlace': None,
'absence': None,
'status_color': 'white',
'activity_id': 'A10049327689',
'activity_type': 'ACCMAT',
'activity_label': 'Accueil du matin',
'child_id': '322423',
'day_str': '2023-05-11',
'unit_id': 'A10049327690',
},
},
]
def test_read_child_agenda_not_linked_error(con, app):
url = get_endpoint('read-child-agenda')