# 61 Filter offices frontend/backend
* adds filters for registration and conservation offices * adds SelectionTableFilter as new holder for these types of filter components
This commit is contained in:
		
							parent
							
								
									5bca8fc8f7
								
							
						
					
					
						commit
						834fa8dbd4
					
				@ -10,7 +10,22 @@ from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from django import forms
 | 
			
		||||
from django.db.models import QuerySet, Q
 | 
			
		||||
 | 
			
		||||
from konova.filters import QueryTableFilter, CheckboxTableFilter
 | 
			
		||||
from konova.filters import QueryTableFilter, CheckboxTableFilter, SelectionTableFilter
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SelectionCompensationTableFilter(SelectionTableFilter):
 | 
			
		||||
    """ Specialization of regular SelectionTableFilter for compensation model
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    def filter_reg_office(self, queryset, name, value):
 | 
			
		||||
        return queryset.filter(
 | 
			
		||||
            intervention__responsible__registration_office=value
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def filter_cons_office(self, queryset, name, value):
 | 
			
		||||
        return queryset.filter(
 | 
			
		||||
            intervention__responsible__conservation_office=value
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class QueryCompensationTableFilter(QueryTableFilter):
 | 
			
		||||
@ -74,6 +89,7 @@ class CompensationTableFilter:
 | 
			
		||||
    Just some minor changes for Compensation model.
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    selection_filter = None
 | 
			
		||||
    query_filter = None
 | 
			
		||||
    checkbox_filter = None
 | 
			
		||||
    qs = None
 | 
			
		||||
@ -83,11 +99,16 @@ class CompensationTableFilter:
 | 
			
		||||
        qs = kwargs.get("queryset", None)
 | 
			
		||||
        request_data = kwargs.get("data", None)
 | 
			
		||||
 | 
			
		||||
        self.query_filter = QueryCompensationTableFilter(
 | 
			
		||||
        self.selection_filter = SelectionCompensationTableFilter(
 | 
			
		||||
            user=user,
 | 
			
		||||
            data=request_data,
 | 
			
		||||
            queryset=qs,
 | 
			
		||||
        )
 | 
			
		||||
        self.query_filter = QueryCompensationTableFilter(
 | 
			
		||||
            user=user,
 | 
			
		||||
            data=request_data,
 | 
			
		||||
            queryset=self.selection_filter.qs,
 | 
			
		||||
        )
 | 
			
		||||
        self.checkbox_filter = CheckboxCompensationTableFilter(
 | 
			
		||||
            user=user,
 | 
			
		||||
            data=request_data,
 | 
			
		||||
@ -149,6 +170,7 @@ class EcoAccountTableFilter:
 | 
			
		||||
    """ TableFilter for eco accounts
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    selection_filter = None
 | 
			
		||||
    query_filter = None
 | 
			
		||||
    checkbox_filter = None
 | 
			
		||||
    qs = None
 | 
			
		||||
@ -158,11 +180,16 @@ class EcoAccountTableFilter:
 | 
			
		||||
        qs = kwargs.get("queryset", None)
 | 
			
		||||
        request_data = kwargs.get("data", None)
 | 
			
		||||
 | 
			
		||||
        self.query_filter = QueryTableFilter(
 | 
			
		||||
        self.selection_filter = SelectionTableFilter(
 | 
			
		||||
            user=user,
 | 
			
		||||
            data=request_data,
 | 
			
		||||
            queryset=qs,
 | 
			
		||||
        )
 | 
			
		||||
        self.query_filter = QueryTableFilter(
 | 
			
		||||
            user=user,
 | 
			
		||||
            data=request_data,
 | 
			
		||||
            queryset=self.selection_filter.qs,
 | 
			
		||||
        )
 | 
			
		||||
        self.checkbox_filter = CheckboxEcoAccountTableFilter(
 | 
			
		||||
            user=user,
 | 
			
		||||
            data=request_data,
 | 
			
		||||
 | 
			
		||||
@ -5,10 +5,11 @@ Contact: michel.peltriaux@sgdnord.rlp.de
 | 
			
		||||
Created on: 22.07.21
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
from konova.filters import QueryTableFilter, CheckboxTableFilter
 | 
			
		||||
from konova.filters import QueryTableFilter, CheckboxTableFilter, SelectionTableFilter
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class InterventionTableFilter:
 | 
			
		||||
    selection_filter = None
 | 
			
		||||
    query_filter = None
 | 
			
		||||
    checkbox_filter = None
 | 
			
		||||
    qs = None
 | 
			
		||||
@ -18,11 +19,16 @@ class InterventionTableFilter:
 | 
			
		||||
        qs = kwargs.get("queryset", None)
 | 
			
		||||
        request_data = kwargs.get("data", None)
 | 
			
		||||
 | 
			
		||||
        self.query_filter = QueryTableFilter(
 | 
			
		||||
        self.selection_filter = SelectionTableFilter(
 | 
			
		||||
            user=user,
 | 
			
		||||
            data=request_data,
 | 
			
		||||
            queryset=qs,
 | 
			
		||||
        )
 | 
			
		||||
        self.query_filter = QueryTableFilter(
 | 
			
		||||
            user=user,
 | 
			
		||||
            data=request_data,
 | 
			
		||||
            queryset=self.selection_filter.qs,
 | 
			
		||||
        )
 | 
			
		||||
        self.checkbox_filter = CheckboxTableFilter(
 | 
			
		||||
            user=user,
 | 
			
		||||
            data=request_data,
 | 
			
		||||
 | 
			
		||||
@ -6,11 +6,14 @@ Created on: 11.01.22
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
import django_filters
 | 
			
		||||
from dal_select2.widgets import ModelSelect2
 | 
			
		||||
from django import forms
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django.db.models import QuerySet, Q
 | 
			
		||||
 | 
			
		||||
from codelist.models import KonovaCode
 | 
			
		||||
from codelist.settings import CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID
 | 
			
		||||
from intervention.inputs import DummyFilterInput
 | 
			
		||||
from konova.models import Parcel, District
 | 
			
		||||
 | 
			
		||||
@ -351,6 +354,79 @@ class RecordableTableFilterMixin(django_filters.FilterSet):
 | 
			
		||||
            return queryset
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RegistrationOfficeTableFilterMixin(django_filters.FilterSet):
 | 
			
		||||
    """ A mixin for AbstractTableFilter
 | 
			
		||||
 | 
			
		||||
    Specialized on filtering for related registration offices
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    ro = django_filters.ModelChoiceFilter(
 | 
			
		||||
        method="filter_reg_office",
 | 
			
		||||
        label=_(""),
 | 
			
		||||
        label_suffix=_(""),
 | 
			
		||||
        queryset=KonovaCode.objects.filter(
 | 
			
		||||
            is_archived=False,
 | 
			
		||||
            is_leaf=True,
 | 
			
		||||
            code_lists__in=[CODELIST_REGISTRATION_OFFICE_ID],
 | 
			
		||||
        ),
 | 
			
		||||
        widget=ModelSelect2(
 | 
			
		||||
            url="codes-registration-office-autocomplete",
 | 
			
		||||
            attrs={
 | 
			
		||||
                "data-placeholder": _("Registration office"),
 | 
			
		||||
                "title": _("Search for registration office"),
 | 
			
		||||
                "class": "",
 | 
			
		||||
            }
 | 
			
		||||
        ),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def filter_reg_office(self, queryset, name, value):
 | 
			
		||||
        qs = queryset.filter(
 | 
			
		||||
            responsible__registration_office=value
 | 
			
		||||
        )
 | 
			
		||||
        return qs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ConservationOfficeTableFilterMixin(django_filters.FilterSet):
 | 
			
		||||
    """ A mixin for AbstractTableFilter
 | 
			
		||||
 | 
			
		||||
    Specialized on filtering for related conservation offices
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    co = django_filters.ModelChoiceFilter(
 | 
			
		||||
        method="filter_cons_office",
 | 
			
		||||
        label=_(""),
 | 
			
		||||
        label_suffix=_(""),
 | 
			
		||||
        queryset=KonovaCode.objects.filter(
 | 
			
		||||
            is_archived=False,
 | 
			
		||||
            is_leaf=True,
 | 
			
		||||
            code_lists__in=[CODELIST_CONSERVATION_OFFICE_ID],
 | 
			
		||||
        ),
 | 
			
		||||
        widget=ModelSelect2(
 | 
			
		||||
            url="codes-conservation-office-autocomplete",
 | 
			
		||||
            attrs={
 | 
			
		||||
                "data-placeholder": _("Conservation office"),
 | 
			
		||||
                "title": _("Search for conservation office"),
 | 
			
		||||
                "class": "",
 | 
			
		||||
            }
 | 
			
		||||
        ),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def filter_cons_office(self, queryset, name, value):
 | 
			
		||||
        qs = queryset.filter(
 | 
			
		||||
            responsible__conservation_office=value
 | 
			
		||||
        )
 | 
			
		||||
        return qs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SelectionTableFilter(AbstractTableFilter,
 | 
			
		||||
                           RegistrationOfficeTableFilterMixin,
 | 
			
		||||
                           ConservationOfficeTableFilterMixin):
 | 
			
		||||
    """ TableFilter holding different filter options for selection related filtering
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class QueryTableFilter(AbstractTableFilter,
 | 
			
		||||
                       KeywordTableFilterMixin,
 | 
			
		||||
                       FileNumberTableFilterMixin,
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,16 @@
 | 
			
		||||
{% load django_tables2 %}
 | 
			
		||||
{% load i18n static fontawesome_5 %}
 | 
			
		||||
 | 
			
		||||
{% block head %}
 | 
			
		||||
    {% comment %}
 | 
			
		||||
        dal documentation (django-autocomplete-light) states using form.media for adding needed scripts.
 | 
			
		||||
        This does not work properly with modal forms, as the scripts are not loaded properly inside the modal.
 | 
			
		||||
        Therefore the script linkages from form.media have been extracted and put inside dal/scripts.html to ensure
 | 
			
		||||
        these scripts are loaded when needed.
 | 
			
		||||
    {% endcomment %}
 | 
			
		||||
    {% include 'dal/scripts.html' %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block body %}
 | 
			
		||||
    <div class="col-md">
 | 
			
		||||
        {% if table.title %}
 | 
			
		||||
@ -83,6 +93,11 @@
 | 
			
		||||
                        <div id="filter" class="collapse" aria-labelledby="filterHeader">
 | 
			
		||||
                            <div class="card-body">
 | 
			
		||||
                                <div class="row">
 | 
			
		||||
                                    {% with table.filter.selection_filter.form as form %}
 | 
			
		||||
                                        {% include 'filter/query_filter.html' %}
 | 
			
		||||
                                    {% endwith %}
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <div class="row mt-3">
 | 
			
		||||
                                    {% with table.filter.query_filter.form as form %}
 | 
			
		||||
                                        {% include 'filter/query_filter.html' %}
 | 
			
		||||
                                    {% endwith %}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user