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

Move TimetableWidget to models.py

parent a7eb4dc1
No related branches found
No related tags found
1 merge request!36Dashboard widget for SMART PLAN
from django.contrib import admin
from .dashboard import TimetableWidget
from .models import TimetableWidget
admin.site.register(TimetableWidget)
from datetime import datetime
from collections import OrderedDict
from django.forms.widgets import Media
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django_global_request.middleware import get_request
from aleksis.apps.chronos.models import TimePeriod
from aleksis.apps.chronos.util.date import get_name_for_day_from_today
from aleksis.core.models import DashboardWidget
from aleksis.core.util.core_helpers import has_person
class TimetableWidget(DashboardWidget):
template = "chronos/widget.html"
def get_context(self):
request = get_request()
context = {"has_plan": True}
wanted_day = TimePeriod.get_next_relevant_day(timezone.now().date(), datetime.now().time())
if has_person(request.user):
person = request.user.person
if person.is_teacher:
# Teacher
type_ = "teacher"
lesson_periods_person = person.lesson_periods_as_teacher
elif person.primary_group:
# Student
type_ = "group"
lesson_periods_person = person.lesson_periods_as_participant
else:
# If no student or teacher, redirect to all timetables
context["has_plan"] = False
lesson_periods = lesson_periods_person.on_day(wanted_day)
# Build dictionary with lessons
per_period = {}
for lesson_period in lesson_periods:
if lesson_period.period.period in per_period:
per_period[lesson_period.period.period].append(lesson_period)
else:
per_period[lesson_period.period.period] = [lesson_period]
context["lesson_periods"] = OrderedDict(sorted(per_period.items()))
context["type"] = type_
context["day"] = wanted_day
context["day_label"] = get_name_for_day_from_today(wanted_day)
context["periods"] = TimePeriod.get_times_dict()
context["smart"] = True
return context
media = Media(css={
"all": ("css/chronos/timetable.css",)
})
class Meta:
proxy = True
verbose_name = _("Timetable widget")
from __future__ import annotations
from collections import OrderedDict
from datetime import date, datetime, timedelta, time
from typing import Dict, Optional, Tuple, Union
......@@ -8,6 +9,7 @@ from django.core.exceptions import ValidationError
from django.db import models
from django.db.models import F, Max, Min, Q
from django.db.models.functions import Coalesce
from django.forms import Media
from django.http.request import QueryDict
from django.urls import reverse
from django.utils import timezone
......@@ -15,11 +17,13 @@ from django.utils.decorators import classproperty
from django.utils.translation import ugettext_lazy as _
from calendarweek.django import CalendarWeek, i18n_day_names_lazy, i18n_day_abbrs_lazy
from django_global_request.middleware import get_request
from aleksis.core.mixins import ExtensibleModel
from aleksis.core.models import Group, Person
from aleksis.core.models import Group, Person, DashboardWidget
from aleksis.apps.chronos.util.date import week_weekday_from_date
from aleksis.apps.chronos.util.date import week_weekday_from_date, get_name_for_day_from_today
from aleksis.core.util.core_helpers import has_person
class LessonPeriodManager(models.Manager):
......@@ -505,3 +509,57 @@ class LessonPeriod(ExtensibleModel):
class Meta:
ordering = ["lesson__date_start", "period__weekday", "period__period"]
indexes = [models.Index(fields=["lesson", "period"])]
class TimetableWidget(DashboardWidget):
template = "chronos/widget.html"
def get_context(self):
request = get_request()
context = {"has_plan": True}
wanted_day = TimePeriod.get_next_relevant_day(timezone.now().date(), datetime.now().time())
if has_person(request.user):
person = request.user.person
if person.is_teacher:
# Teacher
type_ = "teacher"
lesson_periods_person = person.lesson_periods_as_teacher
elif person.primary_group:
# Student
type_ = "group"
lesson_periods_person = person.lesson_periods_as_participant
else:
# If no student or teacher, redirect to all timetables
context["has_plan"] = False
lesson_periods = lesson_periods_person.on_day(wanted_day)
# Build dictionary with lessons
per_period = {}
for lesson_period in lesson_periods:
if lesson_period.period.period in per_period:
per_period[lesson_period.period.period].append(lesson_period)
else:
per_period[lesson_period.period.period] = [lesson_period]
context["lesson_periods"] = OrderedDict(sorted(per_period.items()))
context["type"] = type_
context["day"] = wanted_day
context["day_label"] = get_name_for_day_from_today(wanted_day)
context["periods"] = TimePeriod.get_times_dict()
context["smart"] = True
return context
media = Media(css={
"all": ("css/chronos/timetable.css",)
})
class Meta:
proxy = True
verbose_name = _("Timetable widget")
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