from datetime import date, time, datetime, timedelta import pytz from uuid import uuid4 from os import path from icalendar import Calendar, Event, vCalAddress, vText from colloscope.models import * from .create_calendar import get_calendar LOCAL_TZ = "Europe/Paris" def emailize(nom, first_name=None): if first_name is not None: return "{}.{}@example.com" \ .format( first_name.replace(" ", "_").lower(), nom.replace(" ", "_").lower() ) else: return "{}@example.com" \ .format(nom.replace(" ", "_").lower()) def to_calendar(student, term, include_EDT: bool = True): p = path.abspath('./static/Base_Calendar.ics') with open(p) as f: cal = Calendar.from_ical(f.read()) colles = term.query_colles_of_student(student) for colle in colles: event = Event() summary = f"Colle {colle.slot.subject} ({colle.slot.colleur})" event.add("summary", summary) start = colle.datetime print(start) fin = start + colle.slot.duration event.add("dtstart", start) event.add("dtend", fin) event.add("dtstamp", datetime.now()) event.add("uid", str(uuid4())) event.add("location", f"{colle.slot.room} ({colle.slot.term.cls.school})") event.add("categories", "COLLE-" + str(colle.slot.subject)) description = f"Groupes: {','.join(str(group) for group in colle.groups.all())}" event.add("description", description) organizer = vCalAddress(f"mailto:{emailize(colle.slot.colleur.name)}") organizer.params["cn"] = vText(str(colle.slot.colleur)) organizer.params["role"] = vText("Colleur") event.add("organizer", organizer) for e in colle.final_group(): attendee = vCalAddress(f"mailto:{emailize(e.last_name, first_name=e.first_name)}") attendee.params["role"] = vText("Etudiant") attendee.params["cn"] = vText(str(e)) event.add("attendee", attendee, encode=0) 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