From ccd49962f63d9ccff1f53b05e5c8489510969359 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sat, 6 Feb 2021 13:16:43 +0100 Subject: [PATCH] Show group roles in lesson view --- aleksis/apps/alsijil/rules.py | 2 ++ .../alsijil/class_register/lesson.html | 27 +++++++++++++++++-- aleksis/apps/alsijil/views.py | 23 ++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/aleksis/apps/alsijil/rules.py b/aleksis/apps/alsijil/rules.py index 3b4d93f0f..4e7a84f0d 100644 --- a/aleksis/apps/alsijil/rules.py +++ b/aleksis/apps/alsijil/rules.py @@ -246,6 +246,8 @@ add_perm("alsijil.delete_grouprole", delete_group_role_predicate) view_assigned_group_roles_predicate = group_roles_activated_predicate & ( is_group_owner + | is_lesson_teacher + | is_lesson_parent_group_owner | has_global_perm("alsjil.assign_grouprole") | has_object_perm("alsijil.assign_grouprole") ) diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html b/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html index 23c96614d..f04e06fc3 100644 --- a/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html +++ b/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html @@ -111,6 +111,11 @@ <a href="#previous-lesson">{% trans "Previous lesson" %}</a> </li> {% endif %} + {% if group_roles %} + <li class="tab"> + <a href="#group-roles">{% trans "Group roles" %}</a> + </li> + {% endif %} <li class="tab"> <a href="#version-history">{% trans "Change history" %}</a> </li> @@ -257,7 +262,13 @@ {% if can_edit_lesson_personalnote %} <tr> {{ form.id }} - <td>{{ form.person_name }}{{ form.person_name.value }}</td> + <td>{{ form.person_name }}{{ form.person_name.value }} + <p> + {% for assignment in form.instance.person.group_roles.all %} + {% include "alsijil/group_role/chip.html" with role=assignment.role %} + {% endfor %} + </p> + </td> <td class="center-align"> <label> {{ form.absent }} @@ -310,7 +321,13 @@ </tr> {% else %} <tr> - <td>{{ form.person_name.value }}</td> + <td>{{ form.person_name.value }} + <p> + {% for assignment in form.instance.person.group_roles.all %} + {% include "alsijil/group_role/chip.html" with role=assignment.role %} + {% endfor %} + </p> + </td> <td><i class="material-icons center">{{ form.absent.value|yesno:"check,clear" }}</i></td> <td> <i class="material-icons center">{{ form.late.value|yesno:"check,clear" }}</i> @@ -338,6 +355,12 @@ </div> {% endif %} + {% if group_roles %} + <div class="col s12" id="group-roles"> + {% include "alsijil/group_role/partials/assigned_roles.html" with roles=group_roles group=lesson_period.lesson.groups.first back_url=back_url %} + </div> + {% endif %} + {% if can_view_lesson_documentation %} <div class="col s12" id="version-history"> <div class="card"> diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 068655496..aa60f2cb3 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -117,6 +117,11 @@ def lesson( context["blocked_because_holidays"] = blocked_because_holidays context["holiday"] = holiday + back_url = reverse( + "lesson_by_week_and_period", args=[wanted_week.year, wanted_week.week, lesson_period.pk] + ) + context["back_url"] = back_url + next_lesson = request.user.person.next_lesson(lesson_period, date_of_lesson) prev_lesson = request.user.person.previous_lesson(lesson_period, date_of_lesson) @@ -129,6 +134,14 @@ def lesson( context["next_lesson"] = lesson_period.next if not blocked_because_holidays: + # Group roles + show_group_roles = request.user.person.preferences[ + "alsijil__group_roles_in_lesson_view" + ] and request.user.has_perm("alsijil.view_assigned_grouproles", lesson_period) + if show_group_roles: + groups = lesson_period.lesson.groups.all() + group_roles = GroupRole.objects.with_assignments(date_of_lesson, groups) + context["group_roles"] = group_roles # Create or get lesson documentation object; can be empty when first opening lesson lesson_documentation = lesson_period.get_or_create_lesson_documentation(wanted_week) @@ -143,6 +156,16 @@ def lesson( persons = Person.objects.all() persons_qs = lesson_period.get_personal_notes(persons, wanted_week) + + # Annotate group roles + if show_group_roles: + persons_qs = persons_qs.prefetch_related( + Prefetch( + "person__group_roles", + queryset=GroupRoleAssignment.objects.on_day(date_of_lesson).for_groups(groups), + ), + ) + personal_note_formset = PersonalNoteFormSet( request.POST or None, queryset=persons_qs, prefix="personal_notes" ) -- GitLab