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

Add timetable dashboard widget with smart plan

parent 2102352d
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
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.apps.chronos.util.prev_next import get_next_relevant_day
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 = 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")
......@@ -50,18 +50,9 @@
</div>
</div>
{# Lessons #}
{% for period, lessons in lesson_periods.items %}
<div class="row">
<div class="col s4">
{% include "chronos/partials/period_time.html" with period=period periods=periods %}
</div>
<div class="col s8">
{# A lesson #}
{% include "chronos/partials/lesson.html" with lessons=lessons %}
</div>
</div>
{% endfor %}
{% include "chronos/partials/lessons_col.html" with lesson_periods=lesson_periods %}
</div>
</div>
......
{% for period, lessons in lesson_periods.items %}
<div class="row">
<div class="col s4">
{% include "chronos/partials/period_time.html" with period=period periods=periods %}
</div>
<div class="col s8">
{% include "chronos/partials/lesson.html" with lessons=lessons %}
</div>
</div>
{% endfor %}
{# -*- engine:django -*- #}
{% load i18n static %}
<div class="card">
<div class="card-content">
<span class="card-title">
{% blocktrans with day_label=day_label %}
My timetable for {{ day_label }}
{% endblocktrans %}
</span>
<div class="timetable-plan">
{% if has_plan %}
{% include "chronos/partials/lessons_col.html" with lesson_periods=lesson_periods %}
{% else %}
<div class="alert warning">
<p>
<i class="material-icons left">info</i>
{% blocktrans %}
There is no timetable linked to your person.
{% endblocktrans %}
</p>
</div>
{% endif %}
</div>
</div>
</div>
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