diff --git a/aleksis/apps/alsijil/filters.py b/aleksis/apps/alsijil/filters.py new file mode 100644 index 0000000000000000000000000000000000000000..c6bda959e7a07d8aff42d59fe5ea7663d4c12b4f --- /dev/null +++ b/aleksis/apps/alsijil/filters.py @@ -0,0 +1,28 @@ +from django.utils.translation import gettext as _ + +from django_filters import FilterSet, CharFilter, ModelMultipleChoiceFilter +from material import Layout, Row + +from .models import ExcuseType, PersonalNote + + +class PersonalNoteFilter(FilterSet): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.form.layout = Layout( + # TODO: Row with day (lt and gt) and subject (char search), + Row("absent", "excused", "excuse_type"), + Row("late__lt", "late__gt", "extra_marks") + ) + + class Meta: + model = PersonalNote + fields = { + "excused": ["exact"], + "late": ["lt", "gt"], + "absent": ['exact'], + "excuse_type": ["exact"], + "extra_marks": ["exact"], + # TODO: "date??": ['lt', 'gt'], + # TODO: "subject??": "exact", + } diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index edf9c1f892806dce1565ec352401a08434d073bf..c3bfd95ff9c4b2a33f714daa54ab09a1e8b4c33f 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -40,6 +40,7 @@ from aleksis.core.util import messages from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional from aleksis.core.util.predicates import check_global_permission +from .filters import PersonalNoteFilter from .forms import ( AssignGroupRoleForm, ExcuseTypeForm, @@ -808,6 +809,10 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp "-school_term_start", "-order_year", "-order_week", "-order_weekday", "order_period", ) ) + personal_note_filter_object = PersonalNoteFilter(request.GET, queryset=personal_notes) + filtered_personal_notes = personal_note_filter_object.qs + context["personal_note_filter_form"] = personal_note_filter_object.form + personal_notes_list = [] for note in personal_notes: note.set_object_permission_checker(checker) @@ -824,7 +829,7 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp form.execute() person.refresh_from_db() context["action_form"] = form - table = PersonalNoteTable(personal_notes) + table = PersonalNoteTable(filtered_personal_notes) RequestConfig(request, paginate={"per_page": 20}).configure(table) context["personal_notes_table"] = table print(table.columns, table.rows, sep="\n" * 3)