Skip to content
Snippets Groups Projects
Commit 0c1b499e authored by Hangzhi Yu's avatar Hangzhi Yu
Browse files

Merge branch '79-filter-selects-on-week-overview-and-register-absence' into...

Merge branch '79-filter-selects-on-week-overview-and-register-absence' into '73-add-rules-and-permissions'

Resolve "Filter selects on week overview and register absence"

See merge request !72
parents cbd4e140 f3864ef9
No related branches found
No related tags found
2 merge requests!72Resolve "Filter selects on week overview and register absence",!49Resolve "Add rules and permissions"
Pipeline #3503 passed
......@@ -6,11 +6,13 @@ from django.db.models import Count
from django.utils.translation import gettext_lazy as _
from django_select2.forms import Select2Widget
from guardian.shortcuts import get_objects_for_user
from material import Fieldset, Layout, Row
from aleksis.apps.chronos.managers import TimetableType
from aleksis.apps.chronos.models import TimePeriod
from aleksis.core.models import Group, Person
from aleksis.core.util.predicates import check_global_permission
from .models import ExcuseType, ExtraMark, LessonDocumentation, PersonalNote
......@@ -51,12 +53,7 @@ class SelectForm(forms.Form):
queryset=None, label=_("Group"), required=False, widget=Select2Widget,
)
teacher = forms.ModelChoiceField(
queryset=Person.objects.annotate(
lessons_count=Count("lessons_as_teacher")
).filter(lessons_count__gt=0),
label=_("Teacher"),
required=False,
widget=Select2Widget,
queryset=None, label=_("Teacher"), required=False, widget=Select2Widget,
)
def clean(self) -> dict:
......@@ -78,12 +75,22 @@ class SelectForm(forms.Form):
return data
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request")
super().__init__(*args, **kwargs)
self.fields["group"].queryset = (
Group.objects.for_current_school_term_or_all()
.annotate(lessons_count=Count("lessons"))
.filter(lessons_count__gt=0)
)
if not check_global_permission(self.request.user, "alsijil.view_week"):
self.fields["group"].queryset = self.fields["group"].queryset & get_objects_for_user(
self.request.user, "core.register_absence_group", Group
)
self.fields["teacher"].queryset = (
Person.objects.annotate(lessons_count=Count("lessons_as_teacher")).filter(lessons_count__gt=0)
)
if not check_global_permission(self.request.user, "alsijil.view_week"):
self.fields["teacher"].queryset = self.fields["teacher"].queryset.filter(pk=self.request.user.person.pk)
PersonalNoteFormSet = forms.modelformset_factory(
......@@ -99,11 +106,9 @@ class RegisterAbsenceForm(forms.Form):
)
date_start = forms.DateField(label=_("Start date"), initial=datetime.today)
date_end = forms.DateField(label=_("End date"), initial=datetime.today)
person = forms.ModelChoiceField(label=_("Person"), queryset=None, widget=Select2Widget)
from_period = forms.ChoiceField(label=_("Start period"))
to_period = forms.ChoiceField(label=_("End period"))
person = forms.ModelChoiceField(
label=_("Person"), queryset=Person.objects.all(), widget=Select2Widget
)
absent = forms.BooleanField(label=_("Absent"), initial=True, required=False)
excused = forms.BooleanField(label=_("Excused"), initial=True, required=False)
excuse_type = forms.ModelChoiceField(
......@@ -115,9 +120,23 @@ class RegisterAbsenceForm(forms.Form):
remarks = forms.CharField(label=_("Remarks"), max_length=30, required=False)
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request")
super().__init__(*args, **kwargs)
period_choices = TimePeriod.period_choices
if check_global_permission(self.request.user, "alsijil.register_absence"):
self.fields["person"].queryset = Person.objects.all()
else:
self.fields["person"].queryset = (
get_objects_for_user(self.request.user, "core.register_absence_person", Person)
.union(Person.objects.filter(member_of__owners=self.request.user.person))
.union(
Person.objects.filter(
member_of__in=get_objects_for_user(
self.request.user, "core.register_absence_group", Group
)
)
)
)
self.fields["from_period"].choices = period_choices
self.fields["to_period"].choices = period_choices
self.fields["from_period"].initial = TimePeriod.period_min
......
......@@ -206,7 +206,7 @@ def week_view(
initial = {type_.value: instance}
else:
initial = {}
select_form = SelectForm(request.POST or None, initial=initial)
select_form = SelectForm(request.POST or None, initial=initial, request=request)
if request.method == "POST":
if select_form.is_valid():
......@@ -474,7 +474,7 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
def register_absence(request: HttpRequest) -> HttpResponse:
context = {}
register_absence_form = RegisterAbsenceForm(request.POST or None)
register_absence_form = RegisterAbsenceForm(request.POST or None, request=request)
if request.method == "POST":
if register_absence_form.is_valid() and request.user.has_perm(
......
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