77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
from datetime import date, time, datetime, timedelta
|
|
from pytz import timezone
|
|
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()
|
|
fin = start + colle.slot.duration
|
|
|
|
event.add("dtstart", start, parameters={"tzid": LOCAL_TZ})
|
|
event.add("dtend", fin, parameters={"tzid": LOCAL_TZ})
|
|
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("mailto:{emailize(e.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
|