wip pour l'ajout de l'EDT

This commit is contained in:
joseph 2024-04-20 16:12:02 +02:00
commit 90f721620f
4 changed files with 438 additions and 5 deletions

View File

@ -0,0 +1,335 @@
import pandas
import datetime
import icalendar
import uuid
from pathlib import Path
pd_eleves = pandas.read_csv('Resources/eleves-v2.csv', delimiter=";", header=None)
np_eleves = pd_eleves.to_numpy()
pd_colles = pandas.read_csv('Resources/colloscope-v3.csv', delimiter=";", header=None)
np_colles = pd_colles.to_numpy()
local_tz = "Europe/Paris"
jour_to_delta = {
"lundi": 0,
"mardi": 1,
"mercredi": 2,
"jeudi": 3,
"vendredi": 4,
}
jour_to_byday = {
"lundi": "MO",
"mardi": "TU",
"mercredi": "WE",
"jeudi": "TH",
"vendredi": "FR",
}
langues = ["Anglais", "Allemand", "Espagnol"]
option_langues = {
"EN": ["Anglais LV1"],
"EN-DE": ["Anglais LV1", "Allemand LV2"],
"EN-ES": ["Anglais LV1", "Espagnol LV2"],
"DE-EN": ["Allemand LV1", "Anglais LV2"],
"ES-EN": ["Espangol LV1", "Anglais LV2"]
}
def display(cal):
return cal.to_ical().decode("utf-8").replace('\r\n', '\n').strip()
def open_ics(filename: str) -> icalendar.Calendar:
"""
Ouvre un fichier .ics et renvoie un objet Calendar
"""
p = Path(__file__).with_name('Resources')
p = Path(p, filename)
with p.open('r') as f:
opened_cal = icalendar.Calendar.from_ical(f.read())
return opened_cal
def add_events_from_ics(filename: str, new_cal: icalendar.Calendar):
"""
Ajoute des évènements depuis un fichier .ics vers un objet icalendar.Calendar
"""
cal_to_import = open_ics(filename=filename)
for event in cal_to_import.walk("vevent"):
new_cal.add_component(event)
return new_cal
def get_td_groupe(groupe: str) -> str:
"""
Renvoie le groupe de TD d'un groupe de colle (A, B ou SI)
"""
for row in np_eleves[1:]:
if row[2] == groupe:
return row[3]
def debut_semaine_to_datetime(date_string: str) -> datetime.time:
"""
Transforme un string de debut de semaine au format dd/mm/yyyy en datetime.time
"""
return datetime.datetime.strptime(date_string, "%d/%m/%y")
def heure_to_timedelta(heure: str) -> datetime.timedelta:
"""
Transforme une heure au format "8h30" ou "1h30" ou "2h" en timedelta.
"""
heure = heure.split("h")
delta = datetime.timedelta(hours=int(heure[0]))
if heure[1] != '':
delta += datetime.timedelta(minutes=int(heure[1]))
return delta
def creer_evenement(titre: str, debut: datetime.datetime, duree: datetime.timedelta, description: str = None, localisation: str = None, rrule: str = None) -> icalendar.Event:
"""
Renvoie un évènement icalendar.Event()
titre str: le titre de l'évènement
debut datetime.datetime: la date de début
duree datetime.timedelta: la durée
description str: la description (Optionelle)
localisation str: localisation (Optionelle)
rrule str: règle de récurrence https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html (Optionelle)
"""
new_event = icalendar.Event()
new_event.add("summary", titre)
new_event.add("dtstart", debut, parameters={"tzid": local_tz})
debut += duree
new_event.add("dtend", debut, parameters={"tzid": local_tz})
if localisation is not None:
new_event.add("location", localisation)
if description is not None:
new_event.add("description", description)
if rrule is not None:
new_event.add("rrule", rrule)
new_event.add("uid", str(uuid.uuid4()))
new_event.add("dtstamp", datetime.datetime.now())
# nécessaire pour se conformer à la norme RFC 5545
return new_event
def get_colles_groupe(np_colles, groupe, option_langue):
"""
Renvoie les colles pour un groupe sous la forme d'une liste d'évènements ICS
np_colles: l'array 2D numpy contenant le colloscope
groupe: str, le numéro du groupe
option_langue: str, les options de langue
"""
liste_colles = []
for row in np_colles[4:40]:
if pandas.isnull(row[1]) or row[1] == "pas de colle":
# il n'y a pas de colle, on skip !
continue
# Si la colle n'est pas la LV1 de l'élève, on skip
if row[1] == "Anglais" and not option_langue.startswith("EN"):
continue
elif row[1] == "Allemand" and not option_langue.startswith("DE"):
continue
elif row[1] == "Espagnol" and not option_langue.startswith("ES"):
continue
for index, colle in enumerate(row[8:]):
if pandas.isnull(colle):
continue
# les huit premières cases ne sont pas concernées
if "," in list(colle):
if groupe not in colle.split(","):
continue
elif colle != groupe:
continue
# dans le cas où plusieurs groupes de colles soient concernés
duree = heure_to_timedelta(row[4])
# transforme la durée en timedelta
date = debut_semaine_to_datetime(np_colles[1][index+8])
date += datetime.timedelta(days=jour_to_delta[row[2]])
date += heure_to_timedelta(row[3])
# génère la date à partir de la semaine, du jour et de l'heure
localisation = row[7] if not pandas.isnull(row[7]) else None
new_colle = creer_evenement(
titre=f"Colle {row[1]}",
description=f"{row[5]}" if not pandas.isnull(row[5]) else None,
localisation=localisation,
debut=date,
duree=duree
)
liste_colles.append(new_colle)
return liste_colles
def get_cours(np_colles, groupe):
"""
Renvoie les colles pour un groupe sous la forme d'une liste d'évènements ICS, cad
icalendar.Event
np_colles: l'array 2D numpy contenant le colloscope
groupe: str, le numéro du groupe
"""
listes_cours = []
groupe_td = get_td_groupe(groupe)
for row in np_colles[41:66]:
if pandas.isnull(row[1]):
continue
first_date = np_colles[1][8]
eleves = row[8]
if "à" in list(eleves):
eleves = eleves.split(" ")
debut, fin = [grp for grp in eleves if grp.isdigit()]
if not int(debut) <= int(groupe) <= int(fin):
continue
elif "+" in list(eleves):
eleves = eleves.split("+")
if groupe not in [grp for grp in eleves if grp.isdigit()]:
if groupe_td not in [grp for grp in eleves]:
if int(row[6]) > 1:
if groupe in [grp for grp in row[9].split("+") if grp.isdigit()]:
first_date = np_colles[1][9]
elif groupe_td in [grp for grp in row[9].split("+")]:
first_date = np_colles[1][9]
else:
continue
else:
continue
# si la 1ère occurence du cours est la 1ère ou la 2e semaine
elif groupe != eleves and groupe_td != eleves:
if pandas.isnull(row[9]) or (groupe != row[9] and groupe_td != row[9]):
continue
else:
first_date = np_colles[1][9]
# vérification que le groupe est concerné par le cours
first_date = debut_semaine_to_datetime(first_date)
first_date += heure_to_timedelta(row[3])
first_date += datetime.timedelta(days=jour_to_delta[row[2]])
duree = heure_to_timedelta(row[4])
localisation = row[7] if not pandas.isnull(row[7]) else None
last_date = debut_semaine_to_datetime(np_colles[1][-1]) + datetime.timedelta(days=5)
rrule = {"FREQ": "WEEKLY", "UNTIL": last_date, "INTERVAL": row[6], "BYDAY": jour_to_byday[row[2]], "WKST": "MO"}
new_cours = creer_evenement(
titre=row[1],
description=row[5],
localisation=localisation,
debut=first_date,
duree=duree,
rrule=rrule
)
listes_cours.append(new_cours)
return listes_cours
def get_langues(langues):
"""
Renvoie la liste de cours de langue associés sous forme de list[icalendar.Event]
"""
liste_cours = []
langues = option_langues[langues]
for row in np_colles[67:]:
if row[1] in langues:
debut = debut_semaine_to_datetime(np_colles[1][8])
debut += heure_to_timedelta(row[3])
debut += datetime.timedelta(days=jour_to_delta[row[2]])
duree = heure_to_timedelta(row[4])
last_date = debut_semaine_to_datetime(np_colles[1][-1]) + datetime.timedelta(days=5)
rrule = {"FREQ": "WEEKLY", "UNTIL": last_date, "INTERVAL": row[6], "BYDAY": jour_to_byday[row[2]], "WKST": "MO"}
new_cours = creer_evenement(
titre=row[1],
debut=debut,
duree=duree,
rrule=rrule
)
liste_cours.append(new_cours)
return liste_cours
def get_calendar(groupe: str, langues: str):
""""
Renvoie un calendrier (icalendar.Calendar) pour un groupe avec des langues donné
"""
new_cal_edt = open_ics("Base_Calendar.ics")
# if split:
# new_cal_colles = open_ics("Base_Calendar.ics")
for event in get_langues(langues):
new_cal_edt.add_component(event)
for event in get_cours(np_colles, groupe):
new_cal_edt.add_component(event)
# if split:
# for event in get_colles_groupe(np_colles, groupe, langues):
# new_cal_colles.add_component(event)
# return new_cal_edt.to_ical(), new_cal_colles.to_ical()
# else:
# for event in get_colles_groupe(np_colles, groupe, langues):
# new_cal_edt.add_component(event)
return new_cal_edt.to_ical()

View File

@ -5,11 +5,24 @@ from os import path
from icalendar import Calendar, Event, vCalAddress, vText from icalendar import Calendar, Event, vCalAddress, vText
from colloscope.models import * from colloscope.models import *
from create_calendar import get_calendar
LOCAL_TZ = "Europe/Paris" LOCAL_TZ = "Europe/Paris"
def to_calendar(etudiant, periode): def emailize(nom, prenom=None):
if prenom is not None:
return "{}.{}@example.com" \
.format(
prenom.replace(" ", "_").lower(),
nom.replace(" ", "_").lower()
)
else:
return "{}@example.com" \
.format(nom.replace(" ", "_").lower())
def to_calendar(etudiant, periode, include_EDT: bool = True):
p = path.abspath('./static/Base_Calendar.ics') p = path.abspath('./static/Base_Calendar.ics')
@ -41,16 +54,16 @@ def to_calendar(etudiant, periode):
event.add("location", f"{rotation.creneau.salle} ({rotation.creneau.periode.classe.lycee})") event.add("location", f"{rotation.creneau.salle} ({rotation.creneau.periode.classe.lycee})")
event.add("categories", "COLLE-" + str(rotation.creneau.matiere)) event.add("categories", "COLLE-" + str(rotation.creneau.matiere))
description = "Groupes: {','.join(str(groupe) for groupe in rotation.groupes.all())}" description = f"Groupes: {','.join(str(groupe) for groupe in rotation.groupes.all())}"
event.add(description) event.add(description)
organizer = vCalAddress("mailto:unknown@mp2i-vms.fr") organizer = vCalAddress(f"mailto:{emailize(rotation.creneau.colleur.nom)}")
organizer.params["cn"] = vText(str(rotation.creneau.colleur)) organizer.params["cn"] = vText(str(rotation.creneau.colleur))
organizer.params["role"] = vText("Colleur") organizer.params["role"] = vText("Colleur")
event.add("organizer", organizer) event.add("organizer", organizer)
for e in rotation.groupe_effectif(): for e in rotation.groupe_effectif():
attendee = vCalAddress("mailto:unknown@mp2i-vms.fr") attendee = vCalAddress("mailto:{emailize(e.nom, prenom=e.prenom)}")
attendee.params["role"] = vText("Etudiant") attendee.params["role"] = vText("Etudiant")
attendee.params["cn"] = vText(str(e)) attendee.params["cn"] = vText(str(e))
@ -58,4 +71,11 @@ def to_calendar(etudiant, periode):
cal.add_component(event) cal.add_component(event)
if include_EDT:
#TODO: get le groupe de l'étudiant et ses langue
edt = get_calendar()
for event in edt.walk("VEVENT"):
cal.add_component(event)
return cal return cal

View File

@ -186,7 +186,11 @@ def icalendar(request):
try: try:
lien = LienCalendrier.objects.get(code=request.GET.get("key")) lien = LienCalendrier.objects.get(code=request.GET.get("key"))
return HttpResponse(to_calendar(lien.etudiant, lien.periode).to_ical(), content_type="text/calendar") if not request.GET.get("edt"):
return HttpResponse(to_calendar(lien.etudiant, lien.periode, include_EDT=True).to_ical(), content_type="text/calendar")
return HttpResponse(to_calendar(lien.etudiant, lien.periode, include_EDT=True).to_ical(), content_type="text/calendar")
except LienCalendrier.DoesNotExist: except LienCalendrier.DoesNotExist:
return HttpResponse("Invalid key", status=404) return HttpResponse("Invalid key", status=404)
else: else:

74
static/colloscope-v3.csv Normal file
View File

@ -0,0 +1,74 @@
;Semaine;;;;;;;;;;;;;
;;;;;;;;22/04/24;29/04/24;13/05/24;20/05/24;27/05/24;03/06/24;10/06/24
type;matière;jour;heure;durée;colleur;récurrent (semaines);salle;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
colle;InfoTP;mercredi;14h;2h;M. ROUVROY;;M101;11;12;8;5;11;12;5
colle;InfoTP;mercredi;14h;2h;M. ROUVROY;;M101;13;15;9;6;13;15;7
colle;InfoTP;mercredi;14h;2h;M. ROUVROY;;M101;14;4;10;7;14;4;10
colle;Info;lundi;12h;1h;M. JOSPIN;;;10;5;11;12;4;8;11
colle;Info;lundi;13h;1h;M. JOSPIN;;;9;6;14;15;7;13;14
;;;;;;;;;;;;;;
colle;Maths;mercredi;15h;1h;M. CARPINTERO;;V152;7;3;11;10;9;6;2
colle;Maths;mercredi;14h;1h;M. CARPINTERO;;V152;15;8;14;13;1;5;4
colle;Maths;mercredi;15h;1h;M. BOULLY;;R004;6;5;13;2;3;10;14
colle;Maths;mercredi;14h;1h;M. BOULLY;;R004;8;1;12;4;15;7;11
colle;Maths;mardi;14h;1h;Mme. MULLAERT;;M070;9;11;4;15;5;12;7
colle;Maths;jeudi;18h;1h;Mme. MULLAERT;;;2;14;1;8;6;13;3
colle;Maths;jeudi;18h;1h;M. RAPIN;;C284;10;9;5;11;8;2;13
colle;Maths;vendredi;17h;1h;M. OUBAHA;;C382;4;13;6;14;7;9;15
colle;Maths;vendredi;18h;1h;M. OUBAHA;;C382;5;10;2;3;12;11;8
colle;Maths;mardi;18h;1h;M. RAPIN;;V152;3;7;15;12;4;1;6
;;;;;;;;;;;;;;
colle;Anglais;mercredi;14h;1h;Mme. LE GOURIELLEC;;C393;1;2;5;16;7;13;8
colle;Anglais;mercredi;15h;1h;Mme. LE GOURIELLEC;;C393;3;11;6;4;10;14;9
colle;Anglais;mercredi;16h;1h;M. MANN;;C380;9;14;7;12;5;11;6
colle;Anglais;mercredi;17h;1h;M. MANN;;C380;10;16;8;15;3;4;1
colle;Anglais;mardi;14h;1h;Mme. BELAGGOUNE;;C454;5;4;10;11;9;15;10
colle;Anglais;mardi;18h;1h;Mme. BELAGGOUNE;;;7;13;3;2;6;16;5
colle;Anglais;mardi;17h;1h;Mme. BELAGGOUNE;;;6;12;1;14;8;12;7
colle;Anglais;mardi;17h;1h;M. HERBAULT;;V052;8;15;9;13;1;2;3
;;;;;;;;;;;;;;
colle;Physique;jeudi;18h;1h;M. DE ROUX;;C054;14;8;12;5;13;3;2
colle;Physique;vendredi;16h;1h;Mme. CHIBANI;;C284;15;9;11;10;14;6;13
colle;Physique;lundi;12h;1h;Mme. CHEVALIER;;R105;16;10;4;8;15;7;12
colle;Physique;mercredi;17h;1h;M. POUPY;;R012;12;6;15;9;4;5;11
colle;Physique;mercredi;18h;1h;M. POUPY;;R012;13;7;14;3;2;1;16
colle;Physique;mardi;17h;1h;Mme. CHEVALIER;;R103;2;1;13;7;12;9;15
colle;Physique;mardi;17h;1h;M. COLIN;;C386;11;3;2;1;16;10;4
colle;Physique;mardi;14h;1h;Mme. CHEVALIER;;R103;4;5;16;6;11;8;14
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
cours;TP Physique;lundi;8h30;1h30;Mme CHEVALIER;1;R417;gr 9 à 15;;;;;;
cours;TP Physique;lundi;10h;1h30;Mme CHEVALIER;1;R417;gr 1 à 8;;;;;;
cours;TP Info;lundi;10h;1h30;M. HALFON;2;C154;gr 9 à 15;;;;;;
cours;TP Info;lundi;8h30;1h30;M. HALFON;2;C154;gr 4 à 8;;;;;;
cours;TD Maths;vendredi;11h;2h;Mme MULLAERT;2;M103;B+2+3;A+1;;;;;
cours;TD Maths;vendredi;14h;2h;Mme MULLAERT;2;M103;A+1;B+2+3;;;;;
cours;TP Info;vendredi;14h;2h;M. HALFON;2;;B;A;;;;;
cours;TP Info;vendredi;11h;2h;M. HALFON;2;;A;B;;;;;
cours;TD Physique;jeudi;14h;1h;Mme CHEVALIER;1;R011;gr 9 à 15;gr 9 à 15;;;;;
cours;TD Physique;jeudi;15h;1h;Mme CHEVALIER;1;R011;gr 1 à 8;gr 1 à 8;;;;;
cours;Info;jeudi;10h;3h;M. HALFON;1;M103;A+B;;;;;;
cours ;Chimie;jeudi;10h;2h;Mme CHEVALIER;1;R101;SI;;;;;;
cours;TIPE Physique;jeudi;12h;0h30;Mme CHEVALIER;1;R101;SI;;;;;;
cours;TP ITC ;jeudi;13h30;1h30;M. HALFON;1;;SI;;;;;;
cours;TP SI;lundi;8h;2h;M. DERUMAUX;1;;SI;;;;;;
cours;TIPE Physique;lundi;11h30;0h30;Mme CHEVALIER;1;;SI;;;;;;
cours;SI;lundi;12h;1h;M. DERUMAUX;1;;SI;;;;;;
cours;SI;mardi;14h;1h;M. DERUMAUX;1;;SI;;;;;;
cours ;Maths;lundi;14h;4h;Mme MULLAERT;1;M103;A+B+SI;;;;;;
cours;Maths;mardi;8h;3h;Mme MULLAERT;1;M103;A+B+SI;;;;;;
cours;Maths;mercredi;10h;1h;Mme MULLAERT;1;M103;A+B+SI;;;;;;
cours;Physique;mardi;15h;2h;Mme CHEVALIER;1;R013;A+B+SI;;;;;;
cours ;Français-Philo;mercredi;11h;2h;Mme CHAPIRO;1;M103;A+B+SI;;;;;;
cours;Physique;jeudi;8h;2h;Mme CHEVALIER;1;R101;A+B+SI;;;;;;
cours;EPS;jeudi;16h;2h;M. TORRES-LACAZE;1;Gymnase;A+B+SI;;;;;;
cours;Maths;vendredi;8h;3h;Mme MULLAERT;1;M103;A+B+SI;;;;;;
;;;;;;;;;;;;;;
cours;Anglais LV1;mardi;11h;2h;;1;;;;;;;;
cours;Anglais LV2;mardi ;11h;1h30;;1;;;;;;;;
cours;Espagnol LV1;mercredi;8h;2h;;1;;;;;;;;
cours;Espagnol LV1;mercredi;8h30;1h30;;1;;;;;;;;
cours;Allemand LV1 ;mercredi;8h;2h;;1;;;;;;;;
cours;Allemand LV2;mercredi;8h30;1h30;;1;;;;;;;;
1 Semaine
2 22/04/24 29/04/24 13/05/24 20/05/24 27/05/24 03/06/24 10/06/24
3 type matière jour heure durée colleur récurrent (semaines) salle
4
5
6 colle InfoTP mercredi 14h 2h M. ROUVROY M101 11 12 8 5 11 12 5
7 colle InfoTP mercredi 14h 2h M. ROUVROY M101 13 15 9 6 13 15 7
8 colle InfoTP mercredi 14h 2h M. ROUVROY M101 14 4 10 7 14 4 10
9 colle Info lundi 12h 1h M. JOSPIN 10 5 11 12 4 8 11
10 colle Info lundi 13h 1h M. JOSPIN 9 6 14 15 7 13 14
11
12 colle Maths mercredi 15h 1h M. CARPINTERO V152 7 3 11 10 9 6 2
13 colle Maths mercredi 14h 1h M. CARPINTERO V152 15 8 14 13 1 5 4
14 colle Maths mercredi 15h 1h M. BOULLY R004 6 5 13 2 3 10 14
15 colle Maths mercredi 14h 1h M. BOULLY R004 8 1 12 4 15 7 11
16 colle Maths mardi 14h 1h Mme. MULLAERT M070 9 11 4 15 5 12 7
17 colle Maths jeudi 18h 1h Mme. MULLAERT 2 14 1 8 6 13 3
18 colle Maths jeudi 18h 1h M. RAPIN C284 10 9 5 11 8 2 13
19 colle Maths vendredi 17h 1h M. OUBAHA C382 4 13 6 14 7 9 15
20 colle Maths vendredi 18h 1h M. OUBAHA C382 5 10 2 3 12 11 8
21 colle Maths mardi 18h 1h M. RAPIN V152 3 7 15 12 4 1 6
22
23 colle Anglais mercredi 14h 1h Mme. LE GOURIELLEC C393 1 2 5 16 7 13 8
24 colle Anglais mercredi 15h 1h Mme. LE GOURIELLEC C393 3 11 6 4 10 14 9
25 colle Anglais mercredi 16h 1h M. MANN C380 9 14 7 12 5 11 6
26 colle Anglais mercredi 17h 1h M. MANN C380 10 16 8 15 3 4 1
27 colle Anglais mardi 14h 1h Mme. BELAGGOUNE C454 5 4 10 11 9 15 10
28 colle Anglais mardi 18h 1h Mme. BELAGGOUNE 7 13 3 2 6 16 5
29 colle Anglais mardi 17h 1h Mme. BELAGGOUNE 6 12 1 14 8 12 7
30 colle Anglais mardi 17h 1h M. HERBAULT V052 8 15 9 13 1 2 3
31
32 colle Physique jeudi 18h 1h M. DE ROUX C054 14 8 12 5 13 3 2
33 colle Physique vendredi 16h 1h Mme. CHIBANI C284 15 9 11 10 14 6 13
34 colle Physique lundi 12h 1h Mme. CHEVALIER R105 16 10 4 8 15 7 12
35 colle Physique mercredi 17h 1h M. POUPY R012 12 6 15 9 4 5 11
36 colle Physique mercredi 18h 1h M. POUPY R012 13 7 14 3 2 1 16
37 colle Physique mardi 17h 1h Mme. CHEVALIER R103 2 1 13 7 12 9 15
38 colle Physique mardi 17h 1h M. COLIN C386 11 3 2 1 16 10 4
39 colle Physique mardi 14h 1h Mme. CHEVALIER R103 4 5 16 6 11 8 14
40
41
42 cours TP Physique lundi 8h30 1h30 Mme CHEVALIER 1 R417 gr 9 à 15
43 cours TP Physique lundi 10h 1h30 Mme CHEVALIER 1 R417 gr 1 à 8
44 cours TP Info lundi 10h 1h30 M. HALFON 2 C154 gr 9 à 15
45 cours TP Info lundi 8h30 1h30 M. HALFON 2 C154 gr 4 à 8
46 cours TD Maths vendredi 11h 2h Mme MULLAERT 2 M103 B+2+3 A+1
47 cours TD Maths vendredi 14h 2h Mme MULLAERT 2 M103 A+1 B+2+3
48 cours TP Info vendredi 14h 2h M. HALFON 2 B A
49 cours TP Info vendredi 11h 2h M. HALFON 2 A B
50 cours TD Physique jeudi 14h 1h Mme CHEVALIER 1 R011 gr 9 à 15 gr 9 à 15
51 cours TD Physique jeudi 15h 1h Mme CHEVALIER 1 R011 gr 1 à 8 gr 1 à 8
52 cours Info jeudi 10h 3h M. HALFON 1 M103 A+B
53 cours Chimie jeudi 10h 2h Mme CHEVALIER 1 R101 SI
54 cours TIPE Physique jeudi 12h 0h30 Mme CHEVALIER 1 R101 SI
55 cours TP ITC jeudi 13h30 1h30 M. HALFON 1 SI
56 cours TP SI lundi 8h 2h M. DERUMAUX 1 SI
57 cours TIPE Physique lundi 11h30 0h30 Mme CHEVALIER 1 SI
58 cours SI lundi 12h 1h M. DERUMAUX 1 SI
59 cours SI mardi 14h 1h M. DERUMAUX 1 SI
60 cours Maths lundi 14h 4h Mme MULLAERT 1 M103 A+B+SI
61 cours Maths mardi 8h 3h Mme MULLAERT 1 M103 A+B+SI
62 cours Maths mercredi 10h 1h Mme MULLAERT 1 M103 A+B+SI
63 cours Physique mardi 15h 2h Mme CHEVALIER 1 R013 A+B+SI
64 cours Français-Philo mercredi 11h 2h Mme CHAPIRO 1 M103 A+B+SI
65 cours Physique jeudi 8h 2h Mme CHEVALIER 1 R101 A+B+SI
66 cours EPS jeudi 16h 2h M. TORRES-LACAZE 1 Gymnase A+B+SI
67 cours Maths vendredi 8h 3h Mme MULLAERT 1 M103 A+B+SI
68
69 cours Anglais LV1 mardi 11h 2h 1
70 cours Anglais LV2 mardi 11h 1h30 1
71 cours Espagnol LV1 mercredi 8h 2h 1
72 cours Espagnol LV1 mercredi 8h30 1h30 1
73 cours Allemand LV1 mercredi 8h 2h 1
74 cours Allemand LV2 mercredi 8h30 1h30 1