diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py index 72d3d20275c9c9cfec0909a418940862ce9d6491..322de9d2fa763a3be9cec5fab8fae30c8550a1ec 100644 --- a/aleksis/apps/alsijil/forms.py +++ b/aleksis/apps/alsijil/forms.py @@ -275,13 +275,14 @@ class FilterRegisterObjectForm(forms.Form): date_end = forms.DateField(label=_("End date")) @classmethod - def get_initial(cls): + def get_initial(cls, has_documentation: Optional[bool] = None): date_end = timezone.now().date() date_start = date_end - timedelta(days=30) return { "school_term": SchoolTerm.current, "date_start": date_start, "date_end": date_end, + "has_documentation": has_documentation, } def __init__( @@ -289,13 +290,14 @@ class FilterRegisterObjectForm(forms.Form): request: HttpRequest, *args, for_person: bool = True, + default_documentation: Optional[bool] = None, groups: Optional[Sequence[Group]] = None, **kwargs ): self.request = request person = self.request.user.person - kwargs["initial"] = self.get_initial() + kwargs["initial"] = self.get_initial(has_documentation=default_documentation) super().__init__(*args, **kwargs) self.fields["school_term"].queryset = SchoolTerm.objects.all() diff --git a/aleksis/apps/alsijil/preferences.py b/aleksis/apps/alsijil/preferences.py index 3ad751865f0534a156fd8ea7f9bfc0b558a467f8..e04e7c1da250e23fdcd7d2ef6978ef7d2cfa7602 100644 --- a/aleksis/apps/alsijil/preferences.py +++ b/aleksis/apps/alsijil/preferences.py @@ -124,3 +124,11 @@ class RegisterObjectsTableItemsPerPage(IntegerPreference): def validate(self, value): if value < 1: raise ValidationError(_("Each page must show at least one item.")) + + +@person_preferences_registry.register +class DefaultLessonDocumentationFilter(BooleanPreference): + section = alsijil + name = "default_lesson_documentation_filter" + default = True + verbose_name = _("Filter lessons by existence of their lesson documentation on default") diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 5c09923367c327ff93d473769876a2e2d21248ef..c4c4385f6e00bafe70e7c0147e0e974c9132d5d9 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -961,8 +961,19 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp context["extra_marks"] = extra_marks # Build filter with own form and logic as django-filter can't work with different models - filter_form = FilterRegisterObjectForm(request, request.GET or None, for_person=True) - filter_dict = filter_form.cleaned_data if filter_form.is_valid() else {} + if request.user.person.preferences["alsijil__default_lesson_documentation_filter"]: + default_documentation = False + else: + default_documentation = None + + filter_form = FilterRegisterObjectForm( + request, request.GET or None, for_person=True, default_documentation=default_documentation + ) + filter_dict = ( + filter_form.cleaned_data + if filter_form.is_valid() + else {"has_documentation": default_documentation} + ) filter_dict["person"] = person context["filter_form"] = filter_form