From 8c06c3abfacc74f056cbb8bd3a1edf36735a2153 Mon Sep 17 00:00:00 2001 From: Antoine Waehren Date: Sun, 27 Feb 2022 00:30:59 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20la=20d=C3=A9terminatio?= =?UTF-8?q?n=20des=20p=C3=A9riodes=20de=20dispo=20des=20salles.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rooms_get.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/rooms_get.py b/rooms_get.py index 4fb7193..7b209d5 100644 --- a/rooms_get.py +++ b/rooms_get.py @@ -179,6 +179,7 @@ def getrooms(datet, links=[]) : total_rooms[roomname] = room(roomname, start, end, is_free) # Ajout des infos supplémentaires sur les salles (heures de début-fin de dispo, indicateur de dispo), s'il y en a : + # Première boucle, pour déterminer les salles occupées : for cal in cals : # Bâtiments for comp in cal.walk() : # Événements if comp.name == "VEVENT" : @@ -187,27 +188,37 @@ def getrooms(datet, links=[]) : dateend = comp.decoded("dtend") roomname = str(comp.get("location")) - # Soit l'événement se passe maintenant (salle occupée maintenant) : + # L'événement se passe maintenant (salle occupée maintenant) : if datestart.timestamp() <= datet.timestamp() and dateend.timestamp() > datet.timestamp() : start = dateend # L'heure de début de la prochaine période de disponibilité est la fin de l'événement - if roomname not in total_rooms.keys() : - end = datet.replace(hour = 23, minute = 59, second = 59) # Par défaut, l'heure de fin de la prochaine période disponibilité est aujourd'hui à 23:59 - else : - end = total_rooms[roomname]["end"] + end = datet.replace(hour = 23, minute = 59, second = 59) # Par défaut, l'heure de fin de la prochaine période disponibilité est aujourd'hui à 23:59 is_free = False total_rooms[roomname] = room(roomname, start, end, is_free) + + # Deuxième boucle, pour ajouter les heures de dispos des salles : + for cal in cals : # Bâtiments + for comp in cal.walk() : # Événements + if comp.name == "VEVENT" : + # Récupération des infos : + datestart = comp.decoded("dtstart") + dateend = comp.decoded("dtend") + roomname = str(comp.get("location")) - # Soit l'événement se passe prochainement (salle occupée à l'occasion de cet événement) : - elif datestart.timestamp() > datet.timestamp() : + # L'événement se passe prochainement (salle occupée à l'occasion de cet événement) : + if datestart.timestamp() > datet.timestamp() : if roomname not in total_rooms.keys() : - # On suppose d'abord que la salle est libre maintenant : + # La salle est forcément libre, car les salles occupées sont déjà toutes enregistrées : start = datet.replace(hour = 0, minute = 0, second=0) # Par défaut, l'heure de début de disponibilité est aujourd'hui à 00:00 end = datestart # L'heure de fin de disponibilité est le début de l'événement is_free = True total_rooms[roomname] = room(roomname, start, end, is_free) elif datestart.timestamp() < total_rooms[roomname]["end"].timestamp() : - start = total_rooms[roomname]["start"] - end = datestart + if datestart.timestamp() == total_rooms[roomname]["start"] : + start = dateend + end = total_rooms[roomname]["end"] + else : + start = total_rooms[roomname]["start"] + end = datestart is_free = total_rooms[roomname]["is_free"] total_rooms[roomname] = room(roomname, start, end, is_free)