Skip to content
Snippets Groups Projects
tables.py 2.11 KiB
Newer Older
from typing import Optional

from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables
from django_tables2.utils import A, Accessor
from .models import LessonPeriod

def _css_class_from_lesson_state(
    record: Optional[LessonPeriod] = None, table: Optional[LessonsTable] = None
) -> str:
Jonathan Weth's avatar
Jonathan Weth committed
    """Return CSS class depending on lesson state."""
    if record.get_substitution():
        if record.get_substitution().cancelled:
Jonathan Weth's avatar
Jonathan Weth committed
            return "success"
Jonathan Weth's avatar
Jonathan Weth committed
            return "warning"
class SubstitutionColumn(tables.Column):
    def render(self, value, record: Optional[LessonPeriod] = None):
        if record.get_substitution():
            return format_html(
                "<s>{}</s> → {}",
                value,
                self.substitution_accessor.resolve(record.get_substitution()),
            )
        return value

    def __init__(self, *args, **kwargs):
        self.substitution_accessor = Accessor(kwargs.pop("substitution_accessor"))
        super().__init__(*args, **kwargs)


class LessonsTable(tables.Table):
Jonathan Weth's avatar
Jonathan Weth committed
    """Table for daily lessons and management of substitutions."""
Tom Teichler's avatar
Tom Teichler committed

    class Meta:
        row_attrs = {"class": _css_class_from_lesson_state}

    period__period = tables.Column(accessor="period__period")
Tom Teichler's avatar
Tom Teichler committed
    lesson__groups = tables.Column(accessor="lesson__group_names", verbose_name=_("Groups"))
    lesson__teachers = SubstitutionColumn(
        accessor="lesson__teacher_names",
        substitution_accessor="teacher_names",
        verbose_name=_("Teachers"),
    )
    lesson__subject = SubstitutionColumn(
        accessor="lesson__subject", substitution_accessor="subject"
    )
    room = SubstitutionColumn(accessor="room", substitution_accessor="room")
    edit_substitution = tables.LinkColumn(
Tom Teichler's avatar
Tom Teichler committed
        "edit_substitution",
        args=[A("id"), A("_week")],
        text=_("Substitution"),
        attrs={"a": {"class": "btn-flat waves-effect waves-orange"}},
        verbose_name=_("Manage substitution"),