# 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
4631f27878
commit
0cb65ae720
@ -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…
Reference in New Issue
Block a user