multiply filters for employee
This commit is contained in:
parent
a6f3384126
commit
e5faa90c76
|
|
@ -1,7 +1,8 @@
|
||||||
"""Establishment app filters."""
|
"""Establishment app filters."""
|
||||||
from django.core.validators import EMPTY_VALUES
|
from django.core.validators import EMPTY_VALUES
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django_filters import rest_framework as filters
|
from django_filters import rest_framework as filters, Filter
|
||||||
|
from django_filters.fields import Lookup
|
||||||
from rest_framework.serializers import ValidationError
|
from rest_framework.serializers import ValidationError
|
||||||
|
|
||||||
from establishment import models
|
from establishment import models
|
||||||
|
|
@ -63,13 +64,19 @@ class EstablishmentTypeTagFilter(filters.FilterSet):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ListFilter(Filter):
|
||||||
|
def filter(self, qs, value):
|
||||||
|
value_list = value.split(u',')
|
||||||
|
return super().filter(qs, Lookup(value_list, 'in'))
|
||||||
|
|
||||||
|
|
||||||
class EmployeeBackFilter(filters.FilterSet):
|
class EmployeeBackFilter(filters.FilterSet):
|
||||||
"""Employee filter set."""
|
"""Employee filter set."""
|
||||||
|
|
||||||
search = filters.CharFilter(method='search_by_name_or_last_name')
|
search = filters.CharFilter(method='search_by_name_or_last_name')
|
||||||
position_id = filters.NumberFilter(method='search_by_actual_position_id')
|
position_id = filters.CharFilter(method='search_by_actual_position_id')
|
||||||
public_mark = filters.NumberFilter(method='search_by_public_mark')
|
public_mark = filters.CharFilter(method='search_by_public_mark')
|
||||||
toque_number = filters.NumberFilter(method='search_by_toque_number')
|
toque_number = filters.CharFilter(method='search_by_toque_number')
|
||||||
username = filters.CharFilter(method='search_by_username_or_name')
|
username = filters.CharFilter(method='search_by_username_or_name')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -93,19 +100,22 @@ class EmployeeBackFilter(filters.FilterSet):
|
||||||
def search_by_actual_position_id(self, queryset, name, value):
|
def search_by_actual_position_id(self, queryset, name, value):
|
||||||
"""Search by actual position_id."""
|
"""Search by actual position_id."""
|
||||||
if value not in EMPTY_VALUES:
|
if value not in EMPTY_VALUES:
|
||||||
return queryset.search_by_position_id(value)
|
value_list = [int(val) for val in value.split(',')]
|
||||||
|
return queryset.search_by_position_id(value_list)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def search_by_public_mark(self, queryset, name, value):
|
def search_by_public_mark(self, queryset, name, value):
|
||||||
"""Search by establishment public_mark."""
|
"""Search by establishment public_mark."""
|
||||||
if value not in EMPTY_VALUES:
|
if value not in EMPTY_VALUES:
|
||||||
return queryset.search_by_public_mark(value)
|
value_list = [int(val) for val in value.split(',')]
|
||||||
|
return queryset.search_by_public_mark(value_list)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def search_by_toque_number(self, queryset, name, value):
|
def search_by_toque_number(self, queryset, name, value):
|
||||||
"""Search by establishment toque_number."""
|
"""Search by establishment toque_number."""
|
||||||
if value not in EMPTY_VALUES:
|
if value not in EMPTY_VALUES:
|
||||||
return queryset.search_by_toque_number(value)
|
value_list = [int(val) for val in value.split(',')]
|
||||||
|
return queryset.search_by_toque_number(value_list)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def search_by_username_or_name(self, queryset, name, value):
|
def search_by_username_or_name(self, queryset, name, value):
|
||||||
|
|
|
||||||
|
|
@ -1034,22 +1034,22 @@ class EmployeeQuerySet(models.QuerySet):
|
||||||
Q(establishmentemployee__to_date__isnull=True)
|
Q(establishmentemployee__to_date__isnull=True)
|
||||||
)
|
)
|
||||||
|
|
||||||
def search_by_position_id(self, value):
|
def search_by_position_id(self, value_list):
|
||||||
"""Search by position_id."""
|
"""Search by position_id."""
|
||||||
return self.filter(
|
return self.search_by_actual_employee().filter(
|
||||||
Q(establishmentemployee__position_id=value),
|
Q(establishmentemployee__position_id__in=value_list),
|
||||||
)
|
)
|
||||||
|
|
||||||
def search_by_public_mark(self, value):
|
def search_by_public_mark(self, value_list):
|
||||||
"""Search by establishment public_mark."""
|
"""Search by establishment public_mark."""
|
||||||
return self.filter(
|
return self.search_by_actual_employee().filter(
|
||||||
Q(establishmentemployee__establishment__public_mark=value),
|
Q(establishmentemployee__establishment__public_mark__in=value_list),
|
||||||
)
|
)
|
||||||
|
|
||||||
def search_by_toque_number(self, value):
|
def search_by_toque_number(self, value_list):
|
||||||
"""Search by establishment toque_number."""
|
"""Search by establishment toque_number."""
|
||||||
return self.filter(
|
return self.search_by_actual_employee().filter(
|
||||||
Q(establishmentemployee__establishment__toque_number=value),
|
Q(establishmentemployee__establishment__toque_number__in=value_list),
|
||||||
)
|
)
|
||||||
|
|
||||||
def search_by_username_or_name(self, value):
|
def search_by_username_or_name(self, value):
|
||||||
|
|
|
||||||
|
|
@ -187,7 +187,7 @@ class EmployeeListCreateView(generics.ListCreateAPIView):
|
||||||
permission_classes = (permissions.AllowAny,)
|
permission_classes = (permissions.AllowAny,)
|
||||||
filter_class = filters.EmployeeBackFilter
|
filter_class = filters.EmployeeBackFilter
|
||||||
serializer_class = serializers.EmployeeBackSerializers
|
serializer_class = serializers.EmployeeBackSerializers
|
||||||
queryset = models.Employee.objects.all().with_back_office_related()
|
queryset = models.Employee.objects.all().distinct().with_back_office_related()
|
||||||
|
|
||||||
|
|
||||||
class EmployeesListSearchViews(generics.ListAPIView):
|
class EmployeesListSearchViews(generics.ListAPIView):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user