Skip to content
Snippets Groups Projects
Verified Commit b9f4bc21 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

[WIP] Implement lesson event on base of calendar event

parent a0708de4
No related branches found
No related tags found
1 merge request!301New data model based on calendar events
Pipeline #127964 failed
# flake8: noqa: DJ01
from __future__ import annotations
import os
......@@ -60,6 +59,8 @@ from aleksis.apps.chronos.mixins import (
from aleksis.apps.chronos.util.change_tracker import _get_substitution_models, substitutions_changed
from aleksis.apps.chronos.util.date import get_current_year
from aleksis.apps.chronos.util.format import format_m2m
from aleksis.apps.cursus import models as cursus_models
from aleksis.apps.cursus.models import Course
from aleksis.apps.resint.models import LiveDocument
from aleksis.core.managers import CurrentSiteManagerWithoutMigrations
from aleksis.core.mixins import (
......@@ -67,7 +68,7 @@ from aleksis.core.mixins import (
GlobalPermissionModel,
SchoolTermRelatedExtensibleModel,
)
from aleksis.core.models import DashboardWidget, Group, Room, SchoolTerm
from aleksis.core.models import CalendarEvent, DashboardWidget, Group, Person, Room, SchoolTerm
from aleksis.core.util.core_helpers import has_person
from aleksis.core.util.pdf import generate_pdf_from_template
......@@ -1362,3 +1363,82 @@ class ChronosGlobalPermissions(GlobalPermissionModel):
("view_lessons_day", _("Can view all lessons per day")),
("view_supervisions_day", _("Can view all supervisions per day")),
)
class LessonEvent(CalendarEvent):
name = "lesson"
verbose_name = _("Lesson")
title = models.CharField(verbose_name=_("Name"), max_length=255, blank=True)
course = models.ForeignKey(
Course, on_delete=models.CASCADE, verbose_name=_("Course"), null=True, blank=True
)
groups = models.ManyToManyField(
Group,
related_name="lesson_events",
verbose_name=_("Groups"),
)
rooms = models.ManyToManyField(
Room,
verbose_name=_("Rooms"),
related_name="lesson_events",
blank=True,
)
teachers = models.ManyToManyField(
Person,
verbose_name=_("Teachers"),
related_name="lesson_events_as_teacher",
blank=True,
)
subject = models.ForeignKey(
cursus_models.Subject,
on_delete=models.CASCADE,
verbose_name=_("Subject"),
related_name="lesson_events",
blank=True,
null=True,
)
@classmethod
def value_title(cls, reference_object: "CalendarEvent") -> str:
"""Get the title of the event."""
if reference_object.title:
return reference_object.title
elif reference_object.subject:
return (
reference_object.subject.name
+ " · "
+ ", ".join([g.name for g in reference_object.groups.all()])
)
return _("Lesson")
@classmethod
def value_description(cls, reference_object: "CalendarEvent") -> str:
return ""
@classmethod
def value_color(cls, reference_object: "CalendarEvent") -> str:
"""Get the color of the event."""
return (
reference_object.subject.colour_bg
if reference_object.subject
else super().value_color(reference_object)
)
@classmethod
def get_objects(cls, request) -> Iterable:
"""Return all objects that should be included in the calendar."""
return (
super()
.get_objects(request)
.filter(Q(teachers=request.user.person) | Q(groups__members=request.user.person))
.distinct()
)
class Meta:
verbose_name = _("Lesson Event")
verbose_name_plural = _("Lesson Events")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment