Skip to content
Snippets Groups Projects
Verified Commit ed1fede6 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Merge branch 'master' into 73-add-rules-and-permissions

parents 34ef43d1 dad563e6
No related branches found
No related tags found
1 merge request!49Resolve "Add rules and permissions"
Pipeline #3859 passed
...@@ -81,15 +81,7 @@ class SelectForm(forms.Form): ...@@ -81,15 +81,7 @@ class SelectForm(forms.Form):
person = self.request.user.person person = self.request.user.person
group_pks = ( group_qs = Group.get_groups_with_lessons()
Group.objects.for_current_school_term_or_all()
.annotate(lessons_count=Count("lessons"))
.filter(lessons_count__gt=0)
.values_list("pk", flat=True)
)
group_qs = Group.objects.filter(
Q(child_groups__pk__in=group_pks) | Q(pk__in=group_pks)
).distinct()
if not check_global_permission(self.request.user, "alsijil.view_week"): if not check_global_permission(self.request.user, "alsijil.view_week"):
group_qs = ( group_qs = (
...@@ -164,7 +156,9 @@ class RegisterAbsenceForm(forms.Form): ...@@ -164,7 +156,9 @@ class RegisterAbsenceForm(forms.Form):
) )
) )
) )
self.fields["person"].queryset = Person.objects.filter(pk__in=list(persons_qs.values_list("pk", flat=True))) self.fields["person"].queryset = Person.objects.filter(
pk__in=list(persons_qs.values_list("pk", flat=True))
)
self.fields["from_period"].choices = period_choices self.fields["from_period"].choices = period_choices
self.fields["to_period"].choices = period_choices self.fields["to_period"].choices = period_choices
......
from datetime import date from datetime import date
from typing import Dict, Optional, Union from typing import Dict, Optional, Union
from django.db.models import Exists, OuterRef, QuerySet from django.db.models import Exists, OuterRef, Q, QuerySet
from django.db.models.aggregates import Count
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
import reversion import reversion
...@@ -239,3 +240,28 @@ def get_extra_marks( ...@@ -239,3 +240,28 @@ def get_extra_marks(
stats[extra_mark] = qs stats[extra_mark] = qs
return stats return stats
@Group.class_method
def get_groups_with_lessons(cls: Group):
"""Get all groups which have related lessons or child groups with related lessons."""
group_pks = (
cls.objects.for_current_school_term_or_all()
.annotate(lessons_count=Count("lessons"))
.filter(lessons_count__gt=0)
.values_list("pk", flat=True)
)
groups = cls.objects.filter(
Q(child_groups__pk__in=group_pks) | Q(pk__in=group_pks)
).distinct()
return groups
@Person.method
def get_owner_groups_with_lessons(self: Person):
"""Get all groups the person is an owner of and which have related lessons.
Groups which have child groups with related lessons are also included.
"""
return Group.get_groups_with_lessons().filter(owners=self)
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
$(document).ready(function () { $(document).ready(function () {
$("#id_date_start").change(function () { $("#id_date_start").change(function () {
$("#id_date_end").val($("#id_date_start").val()); $("#id_date_end").val($("#id_date_start").val());
$("#id_date_end").change(); initDatePicker("#id_date_end");
}); });
}); });
</script> </script>
......
...@@ -476,12 +476,8 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse: ...@@ -476,12 +476,8 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
@permission_required("alsijil.view_my_students") @permission_required("alsijil.view_my_students")
def my_students(request: HttpRequest) -> HttpResponse: def my_students(request: HttpRequest) -> HttpResponse:
context = {} context = {}
relevant_groups = ( relevant_groups = request.user.person.get_owner_groups_with_lessons()
Group.objects.for_current_school_term_or_all() persons = Person.objects.filter(member_of__in=relevant_groups)
.annotate(lessons_count=Count("lessons"))
.filter(lessons_count__gt=0, owners=request.user.person)
)
persons = Person.objects.filter(member_of__in=relevant_groups).distinct()
context["persons"] = persons context["persons"] = persons
return render(request, "alsijil/class_register/persons.html", context) return render(request, "alsijil/class_register/persons.html", context)
...@@ -489,12 +485,7 @@ def my_students(request: HttpRequest) -> HttpResponse: ...@@ -489,12 +485,7 @@ def my_students(request: HttpRequest) -> HttpResponse:
@permission_required("alsijil.view_my_groups",) @permission_required("alsijil.view_my_groups",)
def my_groups(request: HttpRequest) -> HttpResponse: def my_groups(request: HttpRequest) -> HttpResponse:
context = {} context = {}
groups = ( context["groups"] = request.user.person.get_owner_groups_with_lessons()
Group.objects.for_current_school_term_or_all()
.annotate(lessons_count=Count("lessons"))
.filter(lessons_count__gt=0, owners=request.user.person)
)
context["groups"] = groups
return render(request, "alsijil/class_register/groups.html", context) return render(request, "alsijil/class_register/groups.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