""" Author: Michel Peltriaux Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany Contact: michel.peltriaux@sgdnord.rlp.de Created on: 22.07.21 """ import django_filters from django import forms from django.contrib.auth.models import User from django.db.models import QuerySet, Q from django.utils.translation import gettext_lazy as _ from intervention.forms import DummyFilterInput from intervention.models import Intervention class InterventionTableFilter(django_filters.FilterSet): """ TableFilter for Intervention model """ sa = django_filters.BooleanFilter( method='_filter_show_all', label=_("Show unshared"), label_suffix=_(""), widget=forms.CheckboxInput() ) q = django_filters.Filter( method='_filter_by_keyword', # Since we use a custom search bar in the template, we need to 'render' this filter # as 'anonymous' HiddenInput (no id, no name). This way our custom search bar's id and name won't be # overwritten with these id and name (which would be equal) # This way we can use the simple filter method mapping for a parameter without using a predefined widget! widget=DummyFilterInput(), ) sr = django_filters.BooleanFilter( method='_filter_show_recorded', label=_("Show recorded"), label_suffix=_(""), widget=forms.CheckboxInput() ) # Gemarkung ##ToDo g = django_filters.CharFilter( field_name="name", lookup_expr="icontains", label=_(""), label_suffix=_(""), widget=forms.TextInput( attrs={ "placeholder": _("District"), "title": _("Search for district") } ), ) # Kreis ## ToDo # Flur ## ToDo # Zähler ## ToDo # Nenner ## ToDo class Meta: model = Intervention fields = [] def __init__(self, user: User, *args, **kwargs): self.user = user super().__init__(*args, **kwargs) def _filter_by_keyword(self, queryset, name, value) -> QuerySet: """ Filters queryset depending on value of search bar input Args: queryset (): name (): value (): Returns: """ value = value.strip() # build filter expression q = Q(title__icontains=value) | Q(identifier__icontains=value) return queryset.filter(q) def _filter_show_all(self, queryset, name, value) -> QuerySet: """ Filters queryset depending on value of 'show_all' setting Args: queryset (): name (): value (): Returns: """ if not value: return queryset.filter( users__in=[self.user], # requesting user has access ) else: return queryset def _filter_show_recorded(self, queryset, name, value) -> QuerySet: """ Filters queryset depending on value of 'show_recorded' setting Args: queryset (): name (): value (): Returns: """ if not value: return queryset.filter( recorded=None, ) else: return queryset