respect RFC 5545 for ics export
This commit is contained in:
parent
b48c601e7b
commit
941c5c69b6
|
@ -1,16 +1,41 @@
|
|||
from datetime import date, time, datetime, timedelta
|
||||
from pytz import timezone
|
||||
from uuid import uuid4
|
||||
|
||||
from icalendar import Calendar, Event, vCalAddress, vText
|
||||
|
||||
from colloscope.models import *
|
||||
|
||||
LOCAL_TZ = "Europe/Paris"
|
||||
|
||||
|
||||
def to_calendar(etudiant, periode):
|
||||
cal = Calendar()
|
||||
|
||||
cal.add("prodid", "-//Colloscope//colles.mp2i-vms.fr//")
|
||||
cal.add("version", "2.0")
|
||||
cal.add(
|
||||
"""
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Europe/Paris
|
||||
X-LIC-LOCATION:Europe/Paris
|
||||
BEGIN:DAYLIGHT
|
||||
TZOFFSETFROM:+0100
|
||||
TZOFFSETTO:+0200
|
||||
TZNAME:CEST
|
||||
DTSTART:19700329T020000
|
||||
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
|
||||
END:DAYLIGHT
|
||||
BEGIN:STANDARD
|
||||
TZOFFSETFROM:+0200
|
||||
TZOFFSETTO:+0100
|
||||
TZNAME:CET
|
||||
DTSTART:19701025T030000
|
||||
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
|
||||
END:STANDARD
|
||||
END:VTIMEZONE
|
||||
"""
|
||||
)
|
||||
|
||||
rotations = Rotation.objects \
|
||||
.filter(groupes__membres=etudiant) \
|
||||
|
@ -20,19 +45,25 @@ def to_calendar(etudiant, periode):
|
|||
|
||||
for rotation in rotations:
|
||||
event = Event()
|
||||
event.add("name", "Colle")
|
||||
event.add("summary", str(rotation))
|
||||
|
||||
summary = f"Colle {rotation.creneau.matiere} ({rotation.creneau.colleur})"
|
||||
event.add("summary", summary)
|
||||
|
||||
start = rotation.datetime()
|
||||
fin = start + rotation.creneau.duree
|
||||
|
||||
event.add("dtstart", start)
|
||||
event.add("dtend", fin)
|
||||
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"{rotation.creneau.salle} ({rotation.creneau.periode.classe.lycee})")
|
||||
event.add("matiere", str(rotation.creneau.matiere))
|
||||
event.add("categories", "COLLE-" + str(rotation.creneau.matiere))
|
||||
|
||||
description = "Groupes: {','.join(str(groupe) for groupe in rotation.groupes.all())}"
|
||||
event.add(description)
|
||||
|
||||
organizer = vCalAddress("mailto:unknown@mp2i-vms.fr")
|
||||
organizer.params["cn"] = vText(str(rotation.creneau.colleur))
|
||||
organizer.params["role"] = vText("Colleur")
|
||||
|
@ -40,8 +71,8 @@ def to_calendar(etudiant, periode):
|
|||
|
||||
for e in rotation.groupe_effectif():
|
||||
attendee = vCalAddress("mailto:unknown@mp2i-vms.fr")
|
||||
attendee.params["cn"] = vText(str(e))
|
||||
attendee.params["role"] = vText("Etudiant")
|
||||
attendee.params["cn"] = vText(str(e))
|
||||
|
||||
event.add("attendee", attendee, encode=0)
|
||||
|
||||
|
|
Loading…
Reference in New Issue