Skip to content
Snippets Groups Projects
Verified Commit 98984611 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Add personal notes to group view. Closes #18.

parent 349a9ec4
No related branches found
No related tags found
No related merge requests found
...@@ -60,9 +60,25 @@ ...@@ -60,9 +60,25 @@
<div class="card-header bg-light text-dark"> <div class="card-header bg-light text-dark">
{% blocktrans %}Personal notes{% endblocktrans %} {% blocktrans %}Personal notes{% endblocktrans %}
</div> </div>
<div class="card-body"> {% for person in persons %}
Not implemented yet. <div class="card-body">
</div> <h5 class="card-title">{{ person.full_name }}</h5>
<p class="card-text">
{% trans "Absent" %}: {{ person.absences }}
({{ person.unexcused }} {% trans "unexcused" %})
</p>
<p class="card-text">
{% trans "Summed up tardiness" %}: {{ person.tardiness }}
</p>
{% for note in person.personal_notes %}
{% if note.remarks %}
<p class="card-text">
{{ note.remarks }}
</p>
{% endif %}
{% endfor %}
</div>
{% endfor %}
</div> </div>
</div> </div>
</div> </div>
......
...@@ -2,7 +2,7 @@ from collections import OrderedDict ...@@ -2,7 +2,7 @@ from collections import OrderedDict
from typing import Optional from typing import Optional
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.db.models import Exists, OuterRef, Q from django.db.models import Count, Exists, OuterRef, Q, Sum
from django.http import Http404, HttpRequest, HttpResponse from django.http import Http404, HttpRequest, HttpResponse
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
...@@ -101,6 +101,7 @@ def group_week(request: HttpRequest, week: Optional[int] = None) -> HttpResponse ...@@ -101,6 +101,7 @@ def group_week(request: HttpRequest, week: Optional[int] = None) -> HttpResponse
if not group: if not group:
raise Http404(_('You must select a group to see the week summary.')) raise Http404(_('You must select a group to see the week summary.'))
# Get all lesson periods for the selected group
lesson_periods = LessonPeriod.objects.filter( lesson_periods = LessonPeriod.objects.filter(
lesson__date_start__lte=week_start, lesson__date_start__lte=week_start,
lesson__date_end__gte=week_end lesson__date_end__gte=week_end
...@@ -114,12 +115,26 @@ def group_week(request: HttpRequest, week: Optional[int] = None) -> HttpResponse ...@@ -114,12 +115,26 @@ def group_week(request: HttpRequest, week: Optional[int] = None) -> HttpResponse
Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group'])) Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group']))
) )
# Aggregate all personal notes for this group and week
persons = Person.objects.filter(
is_active=True
).filter(
Q(member_of=group) | Q(member_of__parent_groups=group)
).prefetch_related(
'personal_notes'
).annotate(
absences=Count('personal_notes__absent', filter=Q(week=wanted_week, absent=True)),
unexcused=Count('personal_notes__absent', filter=Q(week=wanted_week, absent=True, excused=False)),
tardiness=Sum('personal_notes__tardiness', filter=Q(week=wanted_week))
)
# Add a form to filter the view # Add a form to filter the view
select_form = SelectForm(request.GET or None) select_form = SelectForm(request.GET or None)
context['week'] = wanted_week context['week'] = wanted_week
context['group'] = group context['group'] = group
context['lesson_periods'] = lesson_periods context['lesson_periods'] = lesson_periods
context['persons'] = persons
context['select_form'] = select_form context['select_form'] = select_form
return render(request, 'alsijil/group_week.html', context) return render(request, 'alsijil/group_week.html', context)
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