From 97c01c4a9787c996343f8ce4651e96b8df986b6d Mon Sep 17 00:00:00 2001 From: Patrick Mayr Date: Wed, 5 Mar 2025 15:43:20 +0100 Subject: [PATCH] add filter, search text and per page choices --- fet2020/finance/views.py | 65 +++++++ .../templates/finance/resolution_list.html | 160 ++++++++++++------ 2 files changed, 173 insertions(+), 52 deletions(-) diff --git a/fet2020/finance/views.py b/fet2020/finance/views.py index dbbcf3c8..5fef41b5 100644 --- a/fet2020/finance/views.py +++ b/fet2020/finance/views.py @@ -231,6 +231,71 @@ class ResolutionListView(LoginRequiredMixin, ListView): ordering = ["-id"] paginate_by = 10 + _per_page = 10 + _per_page_lst = ["10", "20", "50", "Alle"] + + def get(self, request, *args, **kwargs): + self.q = request.GET.get("q", "") + + self.options_filters = request.GET.getlist("options", []) + + self._per_page = request.GET.get("paginate_by", "10") + if self._per_page == "Alle": + self.paginate_by = None + else: + self.paginate_by = self._per_page + + return super().get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context["q"] = self.q + + # Add selected and all options + context["options"] = Resolution.Option.choices + context["selected_options"] = self.options_filters + + # Add current per page value and list + context["per_page"] = self._per_page + context["per_page_values"] = self._per_page_lst + + # Add paginator links + if context["is_paginated"]: + _page_obj = context["page_obj"] + + base_url = "?" + for option in self.options_filters: + base_url += f"options={option}&".replace(" ", "+") + if self.q: + base_url += f"q={self.q}&".replace(" ", "+") + end_url = f"paginate_by={self._per_page}" + + if _page_obj.has_previous(): + context["prev_page"] = ( + f"{base_url}page={_page_obj.previous_page_number()}&{end_url}" + ) + context["first_page"] = f"{base_url}page=1&{end_url}" + + if _page_obj.has_next(): + context["next_page"] = f"{base_url}page={_page_obj.next_page_number()}&{end_url}" + context["last_page"] = f"{base_url}page={_page_obj.paginator.num_pages}&{end_url}" + + return context + + def get_queryset(self): + qs = super().get_queryset() + + if self.q: + qs = qs.filter(Q(name__icontains=self.q) | Q(voting_text__icontains=self.q)) + + if self.options_filters: + filter_lst = [ + elem[0] for elem in Resolution.Option.choices if elem[1] in self.options_filters + ] + qs = qs.filter(option__in=filter_lst) + + return qs class ResolutionUpdateView(LoginRequiredMixin, UpdateView): diff --git a/fet2020/templates/finance/resolution_list.html b/fet2020/templates/finance/resolution_list.html index e138dae4..578881bf 100644 --- a/fet2020/templates/finance/resolution_list.html +++ b/fet2020/templates/finance/resolution_list.html @@ -4,65 +4,121 @@ {% block content %} -
+

Beschlusssammlung

Beschluss eingeben -
-
- - - - - - - - - - - - - {% for result in object_list %} - - - - - - - - - {% endfor %} - -
NummerBezeichnungAbstimmungsverhaltenBeschluss
{{ result.id }}{{ result.name }}{{ result.voting }}{{ result.get_option_display }} - -
+
+
+ + + +
+ +
+ +
- {% if is_paginated %} -
-
- -
+
+
+ + + + + + + + + + + + {% for result in object_list %} + + + + + + + + {% endfor %} + +
NummerBezeichnungAbstimmungsverhaltenBeschluss
{{ result.id }}{{ result.name }}{{ result.voting }}{{ result.get_option_display }} + +
- {% endif %} -
+ +
+
+ + + +
+ + {% if is_paginated %} + + {% endif %} +
+
+
{% endblock content %}