From 65c9286f99bc33efae44d10bc5c1f37c5fe1c386 Mon Sep 17 00:00:00 2001 From: Hangzhi Yu <hangzhi@protonmail.com> Date: Wed, 19 May 2021 19:25:55 +0200 Subject: [PATCH] Add dashboard widget for personal notes --- .../0013_add_personal_note_widget.py | 25 +++++++++++++ aleksis/apps/alsijil/models.py | 13 ++++++- .../class_register/personalnote_widget.html | 36 +++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 aleksis/apps/alsijil/migrations/0013_add_personal_note_widget.py create mode 100644 aleksis/apps/alsijil/templates/alsijil/class_register/personalnote_widget.html diff --git a/aleksis/apps/alsijil/migrations/0013_add_personal_note_widget.py b/aleksis/apps/alsijil/migrations/0013_add_personal_note_widget.py new file mode 100644 index 000000000..1ad991598 --- /dev/null +++ b/aleksis/apps/alsijil/migrations/0013_add_personal_note_widget.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2 on 2021-04-30 00:07 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('alsijil', '0012_unique_relation'), + ] + + operations = [ + migrations.CreateModel( + name='PersonalNotesDashboardWidget', + fields=[ + ('dashboardwidget_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.dashboardwidget')), + ], + options={ + 'abstract': False, + 'base_manager_name': 'objects', + }, + bases=('core.dashboardwidget',), + ), + ] diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index 4eecb39f4..5dd0b97e5 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -32,7 +32,7 @@ from aleksis.apps.chronos.managers import GroupPropertiesMixin from aleksis.apps.chronos.mixins import WeekRelatedMixin from aleksis.apps.chronos.models import Event, ExtraLesson, LessonPeriod from aleksis.core.mixins import ExtensibleModel, GlobalPermissionModel -from aleksis.core.models import SchoolTerm +from aleksis.core.models import DashboardWidget, SchoolTerm from aleksis.core.util.core_helpers import get_site_preferences from aleksis.core.util.model_helpers import ICONS @@ -427,3 +427,14 @@ class AlsijilGlobalPermissions(GlobalPermissionModel): ("register_absence", _("Can register absence")), ("list_personal_note_filters", _("Can list all personal note filters")), ) + + +class PersonalNotesDashboardWidget(DashboardWidget): + template = "alsijil/class_register/personalnote_widget.html" + + def get_context(self, request): + context = {} + + context["personal_notes"] = PersonalNote.objects.filter(absent=True, excused=False, person=request.user.person) + + #TODO: limit, ordering, schoolterm diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/personalnote_widget.html b/aleksis/apps/alsijil/templates/alsijil/class_register/personalnote_widget.html new file mode 100644 index 000000000..8e3d32016 --- /dev/null +++ b/aleksis/apps/alsijil/templates/alsijil/class_register/personalnote_widget.html @@ -0,0 +1,36 @@ +{# -*- engine:django -*- #} + +{% load i18n static %} + +<div class="card"> + <div class="card-content"> + <span class="card-title"> + {% blocktrans %} + My unexcused lessons + {% endblocktrans %} + </span> + <ul class="collection"> + {% for note in personal_notes %} + <li class="collection-item"> + <i class="material-icons left red-text">warning</i> + <p class="no-margin"> + <a href="{{ note.get_absolute_url }}">{{ note.date }}, {{ note.lesson_period }}</a> + </p> + {% if note.remarks %} + <p class="no-margin"><em>{{ note.remarks }}</em></p> + {% endif %} + </li> + {% empty %} + <li class="collection-item avatar valign-wrapper"> + <i class="material-icons left materialize-circle green white-text">check</i> + <span class="title">{% trans "There are no unexcused lessons." %}</span> + </li> + {% endfor %} + </ul> + </div> + + + <div class="card-action"> + <a href="{% url "overview_me" %}">{% trans "Go to personal overview" %}</a> + </div> +</div> -- GitLab