diff --git a/aleksis/apps/alsijil/menus.py b/aleksis/apps/alsijil/menus.py index 8869d3337581df63d5d498c19a055747dd8bae24..d20c88b567ad7d4feb86231eafa4e35d880f9e1c 100644 --- a/aleksis/apps/alsijil/menus.py +++ b/aleksis/apps/alsijil/menus.py @@ -24,12 +24,18 @@ MENUS = { "icon": "view_week", "validators": ["menu_generator.validators.is_authenticated"], }, -{ + { "name": _("My overview"), "url": "overview_me", "icon": "insert_chart", "validators": ["menu_generator.validators.is_authenticated"], }, + { + "name": _("My students"), + "url": "my_students", + "icon": "people", + "validators": ["menu_generator.validators.is_authenticated"], + }, { "name": _("Register absence"), "url": "register_absence", diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/persons.html b/aleksis/apps/alsijil/templates/alsijil/class_register/persons.html new file mode 100644 index 0000000000000000000000000000000000000000..c3f5e35d48991bafd37ffdc3def7f445d1400247 --- /dev/null +++ b/aleksis/apps/alsijil/templates/alsijil/class_register/persons.html @@ -0,0 +1,26 @@ +{# -*- engine:django -*- #} +{% extends "core/base.html" %} +{% load data_helpers %} +{% load week_helpers %} +{% load i18n %} + +{% block browser_title %}{% blocktrans %}My students{% endblocktrans %}{% endblock %} + + +{% block page_title %} + {% blocktrans %}My students{% endblocktrans %} +{% endblock %} + +{% block content %} + <div class="collection"> + {% for person in persons %} + <a class="collection-item" href="{% url "overview_person" person.pk %}"> + {{ person }} + </a> + {% empty %} + <li class="collection-item flow-text"> + {% blocktrans %}No students available.{% endblocktrans %} + </li> + {% endfor %} + </div> +{% endblock %} diff --git a/aleksis/apps/alsijil/urls.py b/aleksis/apps/alsijil/urls.py index 2fc61a1c275592d90f8326b954b150b6c18a83bd..0482571bd3cd9cf7c7da4a15b4cd7fc3e0a58c36 100644 --- a/aleksis/apps/alsijil/urls.py +++ b/aleksis/apps/alsijil/urls.py @@ -26,7 +26,8 @@ urlpatterns = [ path( "print/group/<int:id_>", views.full_register_group, name="full_register_group" ), - path("person/<int:id_>/", views.overview_person, name="overview_person"), + path("persons/", views.my_students, name="my_students"), + path("persons/<int:id_>/", views.overview_person, name="overview_person"), path("me/", views.overview_person, name="overview_me"), path("absence/new", views.register_absence, name="register_absence"), path("extra_marks/", views.ExtraMarkListView.as_view(), name="extra_marks"), diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index d07fae9ac2f310e9777639643a99d6a1aa6a21f5..6c2dcba3332395de4e78ae3e68100a171628da39 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -454,11 +454,23 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse: return render(request, "alsijil/print/full_register.html", context) -def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: +def my_students(request: HttpRequest) -> HttpResponse: context = {} - person = objectgetter_optional(Person, default="request.user.person", default_eval=True)( - request, id_ + relevant_groups = ( + Group.objects.for_current_school_term_or_all() + .annotate(lessons_count=Count("lessons")) + .filter(lessons_count__gt=0, owners=request.user.person) ) + persons = Person.objects.filter(member_of__in=relevant_groups) + context["persons"] = persons + return render(request, "alsijil/class_register/persons.html", context) + + +def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: + context = {} + person = objectgetter_optional( + Person, default="request.user.person", default_eval=True + )(request, id_) context["person"] = person if request.method == "POST": @@ -554,11 +566,7 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp unexcused=Count("absent") ) ) - stat.update( - personal_notes.aggregate( - tardiness=Sum("late") - ) - ) + stat.update(personal_notes.aggregate(tardiness=Sum("late"))) for extra_mark in ExtraMark.objects.all(): stat.update(