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

Merge branch '34-turn-group-week-view-into-general-week-view' into 'master'

Turn group week view into general week view.

Closes #34

See merge request Teckids/BiscuIT/BiscuIT-App-Alsijil!16
parents 28a358fa 26186827
No related branches found
No related tags found
1 merge request!16Turn group week view into general week view.
...@@ -2,7 +2,8 @@ from django import forms ...@@ -2,7 +2,8 @@ from django import forms
from django.db.models import Count from django.db.models import Count
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from biscuit.core.models import Group from biscuit.apps.chronos.models import Room
from biscuit.core.models import Group, Person
from .models import LessonDocumentation, PersonalNote from .models import LessonDocumentation, PersonalNote
...@@ -33,6 +34,14 @@ class SelectForm(forms.Form): ...@@ -33,6 +34,14 @@ class SelectForm(forms.Form):
group = forms.ModelChoiceField( group = forms.ModelChoiceField(
queryset=Group.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0), queryset=Group.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0),
label=_('Group'), required=False) label=_('Group'), required=False)
teacher = forms.ModelChoiceField(
queryset=Person.objects.annotate(lessons_count=Count(
'lessons')).filter(lessons_count__gt=0),
label=_('Teacher'), required=False)
room = forms.ModelChoiceField(
queryset=Room.objects.annotate(lessons_count=Count(
'lesson_periods')).filter(lessons_count__gt=0),
label=_('Room'), required=False)
PersonalNoteFormSet = forms.modelformset_factory( PersonalNoteFormSet = forms.modelformset_factory(
......
...@@ -15,7 +15,7 @@ MENUS = { ...@@ -15,7 +15,7 @@ MENUS = {
}, },
{ {
'name': _('Current week'), 'name': _('Current week'),
'url': 'group_week', 'url': 'week_view',
'validators': ['menu_generator.validators.is_authenticated'] 'validators': ['menu_generator.validators.is_authenticated']
} }
] ]
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
{% endif %} {% endif %}
</div> </div>
{% if group %} {% if group or teacher or room %}
<div class="row"> <div class="row">
<div class="col-md-7"> <div class="col-md-7">
<div class="card"> <div class="card">
...@@ -115,7 +115,7 @@ ...@@ -115,7 +115,7 @@
<div class="card-body"> <div class="card-body">
<p> <p>
{% blocktrans %} {% blocktrans %}
You must select a group to see the week summary. You must select a group, a teacher or a room to see the week summary.
{% endblocktrans %} {% endblocktrans %}
</p> </p>
</div> </div>
......
...@@ -7,9 +7,9 @@ urlpatterns = [ ...@@ -7,9 +7,9 @@ urlpatterns = [
path('lesson', views.lesson, name='lesson'), path('lesson', views.lesson, name='lesson'),
path('lesson/<int:year>/<int:week>/<int:period_id>', views.lesson, path('lesson/<int:year>/<int:week>/<int:period_id>', views.lesson,
name='lesson_by_week_and_period'), name='lesson_by_week_and_period'),
path('group/week', views.group_week, name='group_week'), path('week', views.week_view, name='week_view'),
path('group/week/<int:year>/<int:week>', views.group_week, path('week/<int:year>/<int:week>', views.week_view,
name='group_week_by_week'), name='week_view_by_week'),
path('print/group/<int:id_>', views.full_register_group, path('print/group/<int:id_>', views.full_register_group,
name='full_register_group') name='full_register_group')
] ]
...@@ -11,7 +11,7 @@ from django.urls import reverse ...@@ -11,7 +11,7 @@ from django.urls import reverse
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.cache import cache_page from django.views.decorators.cache import cache_page
from biscuit.apps.chronos.models import LessonPeriod, TimePeriod from biscuit.apps.chronos.models import LessonPeriod, Room, TimePeriod
from biscuit.apps.chronos.util import CalendarWeek, current_lesson_periods from biscuit.apps.chronos.util import CalendarWeek, current_lesson_periods
from biscuit.core.models import Group, Person from biscuit.core.models import Group, Person
...@@ -90,7 +90,7 @@ def lesson(request: HttpRequest, year: Optional[int] = None, week: Optional[int] ...@@ -90,7 +90,7 @@ def lesson(request: HttpRequest, year: Optional[int] = None, week: Optional[int]
@login_required @login_required
def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[int] = None) -> HttpResponse: def week_view(request: HttpRequest, year: Optional[int] = None, week: Optional[int] = None) -> HttpResponse:
context = {} context = {}
if year and week: if year and week:
...@@ -98,18 +98,7 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[ ...@@ -98,18 +98,7 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
else: else:
wanted_week = CalendarWeek() wanted_week = CalendarWeek()
if request.GET.get('group', None): lesson_periods = LessonPeriod.objects.annotate(
# Use requested group
group = Group.objects.get(pk=request.GET['group'])
elif hasattr(request, 'user') and hasattr(request.user, 'person'):
# Try to select group from owned groups of user
group = request.user.person.owner_of.first()
else:
group = None
if group:
# Get all lesson periods for the selected group
lesson_periods = LessonPeriod.objects.annotate(
has_documentation=Exists(LessonDocumentation.objects.filter( has_documentation=Exists(LessonDocumentation.objects.filter(
~Q(topic__exact=''), ~Q(topic__exact=''),
lesson_period=OuterRef('pk'), lesson_period=OuterRef('pk'),
...@@ -124,10 +113,34 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[ ...@@ -124,10 +113,34 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
'lesson__groups', 'lesson__teachers', 'substitutions' 'lesson__groups', 'lesson__teachers', 'substitutions'
).extra( ).extra(
select={'_week': wanted_week.week} select={'_week': wanted_week.week}
).filter( )
Q(lesson__groups=group) | Q(lesson__groups__parent_groups=group)
).distinct() teacher = None
group = None
room = None
if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None):
# Incrementally filter lesson periods by GET parameters
if 'group' in request.GET and request.GET['group']:
group = Group.objects.get(pk=request.GET['group'])
lesson_periods = lesson_periods.filter(
Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group'])))
if 'teacher' in request.GET and request.GET['teacher']:
teacher = Person.objects.get(pk=request.GET['teacher'])
lesson_periods = lesson_periods.filter(
Q(substitutions__teachers__pk=int(request.GET['teacher']), substitutions__week=wanted_week.week) | Q(lesson__teachers__pk=int(request.GET['teacher'])))
if 'room' in request.GET and request.GET['room']:
room = Room.objects.get(pk=request.GET['room'])
lesson_periods = lesson_periods.filter(
room__pk=int(request.GET['room']))
elif hasattr(request, 'user') and hasattr(request.user, 'person'):
group = request.user.person.owner_of.first()
lesson_periods = lesson_periods.filter(
Q(lesson__groups=group) | Q(lesson__groups__parent_groups=group))
else:
lesson_periods = None
if lesson_periods:
# Aggregate all personal notes for this group and week # Aggregate all personal notes for this group and week
persons = Person.objects.filter( persons = Person.objects.filter(
is_active=True is_active=True
...@@ -153,28 +166,26 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[ ...@@ -153,28 +166,26 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
)) ))
) )
else: else:
lesson_periods = None
persons = None persons = None
# 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['current_head'] = str(wanted_week) context['current_head'] = str(wanted_week)
context['week'] = wanted_week context['week'] = wanted_week
context['group'] = group context['group'] = group
context['teacher'] = teacher
context['room'] = room
context['lesson_periods'] = lesson_periods context['lesson_periods'] = lesson_periods
context['persons'] = persons context['persons'] = persons
context['select_form'] = select_form context['select_form'] = select_form
week_prev = wanted_week - 1 week_prev = wanted_week - 1
week_next = wanted_week + 1 week_next = wanted_week + 1
context['url_prev'] = '%s?%s' % (reverse('group_week_by_week', args=[week_prev.year, week_prev.week]), request.GET.urlencode()) context['url_prev'] = '%s?%s' % (reverse('week_view_by_week', args=[week_prev.year, week_prev.week]), request.GET.urlencode())
context['url_next'] = '%s?%s' % (reverse('group_week_by_week', args=[week_next.year, week_next.week]), request.GET.urlencode()) context['url_next'] = '%s?%s' % (reverse('week_view_by_week', args=[week_next.year, week_next.week]), request.GET.urlencode())
return render(request, 'alsijil/group_week.html', context) return render(request, 'alsijil/week_view.html', context)
@login_required @login_required
......
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