position filter for employee
This commit is contained in:
parent
de55154d89
commit
2aec0bdfb4
|
|
@ -1,6 +1,5 @@
|
||||||
"""Account models"""
|
"""Account models"""
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from tabnanny import verbose
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import AbstractUser, UserManager as BaseUserManager
|
from django.contrib.auth.models import AbstractUser, UserManager as BaseUserManager
|
||||||
|
|
|
||||||
|
|
@ -1,8 +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_filters import rest_framework as filters
|
from django_filters import rest_framework as filters
|
||||||
from rest_framework.serializers import ValidationError
|
from rest_framework.serializers import ValidationError
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
from establishment import models
|
from establishment import models
|
||||||
|
|
||||||
|
|
@ -10,8 +10,8 @@ from establishment import models
|
||||||
class EstablishmentFilter(filters.FilterSet):
|
class EstablishmentFilter(filters.FilterSet):
|
||||||
"""Establishment filter set."""
|
"""Establishment filter set."""
|
||||||
|
|
||||||
tag_id = filters.NumberFilter(field_name='tags__metadata__id',)
|
tag_id = filters.NumberFilter(field_name='tags__metadata__id', )
|
||||||
award_id = filters.NumberFilter(field_name='awards__id',)
|
award_id = filters.NumberFilter(field_name='awards__id', )
|
||||||
search = filters.CharFilter(method='search_text')
|
search = filters.CharFilter(method='search_text')
|
||||||
type = filters.CharFilter(method='by_type')
|
type = filters.CharFilter(method='by_type')
|
||||||
subtype = filters.CharFilter(method='by_subtype')
|
subtype = filters.CharFilter(method='by_subtype')
|
||||||
|
|
@ -67,6 +67,7 @@ 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.CharFilter(method='search_by_actual_position_id')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
@ -74,6 +75,7 @@ class EmployeeBackFilter(filters.FilterSet):
|
||||||
model = models.Employee
|
model = models.Employee
|
||||||
fields = (
|
fields = (
|
||||||
'search',
|
'search',
|
||||||
|
'position_id',
|
||||||
)
|
)
|
||||||
|
|
||||||
def search_by_name_or_last_name(self, queryset, name, value):
|
def search_by_name_or_last_name(self, queryset, name, value):
|
||||||
|
|
@ -82,6 +84,12 @@ class EmployeeBackFilter(filters.FilterSet):
|
||||||
return queryset.search_by_name_or_last_name(value)
|
return queryset.search_by_name_or_last_name(value)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
def search_by_actual_position_id(self, queryset, name, value):
|
||||||
|
"""Search by actual position_id."""
|
||||||
|
if value not in EMPTY_VALUES:
|
||||||
|
return queryset.search_by_position_id(value)
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class EmployeeBackSearchFilter(EmployeeBackFilter):
|
class EmployeeBackSearchFilter(EmployeeBackFilter):
|
||||||
def search_by_name_or_last_name(self, queryset, name, value):
|
def search_by_name_or_last_name(self, queryset, name, value):
|
||||||
|
|
|
||||||
|
|
@ -266,16 +266,16 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
2 With ordering by distance.
|
2 With ordering by distance.
|
||||||
"""
|
"""
|
||||||
qs = self.similar_base(establishment) \
|
qs = self.similar_base(establishment) \
|
||||||
.filter(**filters)
|
.filter(**filters)
|
||||||
if establishment.address and establishment.address.coordinates:
|
if establishment.address and establishment.address.coordinates:
|
||||||
return Subquery(
|
return Subquery(
|
||||||
qs.annotate_distance(point=establishment.location)
|
qs.annotate_distance(point=establishment.location)
|
||||||
.order_by('distance')
|
.order_by('distance')
|
||||||
.distinct()
|
.distinct()
|
||||||
.values_list('id', flat=True)[:settings.LIMITING_QUERY_OBJECTS]
|
.values_list('id', flat=True)[:settings.LIMITING_QUERY_OBJECTS]
|
||||||
)
|
)
|
||||||
return Subquery(
|
return Subquery(
|
||||||
qs.values_list('id', flat=True)[:settings.LIMITING_QUERY_OBJECTS]
|
qs.values_list('id', flat=True)[:settings.LIMITING_QUERY_OBJECTS]
|
||||||
)
|
)
|
||||||
|
|
||||||
def similar_restaurants(self, restaurant):
|
def similar_restaurants(self, restaurant):
|
||||||
|
|
@ -293,10 +293,10 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return self.filter(id__in=ids_by_subquery.queryset) \
|
return self.filter(id__in=ids_by_subquery.queryset) \
|
||||||
.annotate_intermediate_public_mark() \
|
.annotate_intermediate_public_mark() \
|
||||||
.annotate_mark_similarity(mark=restaurant.public_mark) \
|
.annotate_mark_similarity(mark=restaurant.public_mark) \
|
||||||
.order_by('mark_similarity') \
|
.order_by('mark_similarity') \
|
||||||
.distinct('mark_similarity', 'id')
|
.distinct('mark_similarity', 'id')
|
||||||
|
|
||||||
def annotate_same_subtype(self, establishment):
|
def annotate_same_subtype(self, establishment):
|
||||||
"""Annotate flag same subtype."""
|
"""Annotate flag same subtype."""
|
||||||
|
|
@ -325,8 +325,8 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
similarity_rules['distinctions'].append('distance')
|
similarity_rules['distinctions'].append('distance')
|
||||||
|
|
||||||
return base_qs.has_published_reviews() \
|
return base_qs.has_published_reviews() \
|
||||||
.order_by(*similarity_rules['ordering']) \
|
.order_by(*similarity_rules['ordering']) \
|
||||||
.distinct(*similarity_rules['distinctions'], 'id')
|
.distinct(*similarity_rules['distinctions'], 'id')
|
||||||
|
|
||||||
def by_wine_region(self, wine_region):
|
def by_wine_region(self, wine_region):
|
||||||
"""
|
"""
|
||||||
|
|
@ -360,7 +360,7 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
similarity_rules['distinctions'].append('distance')
|
similarity_rules['distinctions'].append('distance')
|
||||||
|
|
||||||
return base_qs.order_by(*similarity_rules['ordering']) \
|
return base_qs.order_by(*similarity_rules['ordering']) \
|
||||||
.distinct(*similarity_rules['distinctions'], 'id')
|
.distinct(*similarity_rules['distinctions'], 'id')
|
||||||
|
|
||||||
def similar_distilleries(self, distillery):
|
def similar_distilleries(self, distillery):
|
||||||
"""
|
"""
|
||||||
|
|
@ -380,9 +380,9 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
similarity_rules['distinctions'].append('distance')
|
similarity_rules['distinctions'].append('distance')
|
||||||
|
|
||||||
return base_qs.published() \
|
return base_qs.published() \
|
||||||
.has_published_reviews() \
|
.has_published_reviews() \
|
||||||
.order_by(*similarity_rules['ordering']) \
|
.order_by(*similarity_rules['ordering']) \
|
||||||
.distinct(*similarity_rules['distinctions'], 'id')
|
.distinct(*similarity_rules['distinctions'], 'id')
|
||||||
|
|
||||||
def similar_food_producers(self, food_producer):
|
def similar_food_producers(self, food_producer):
|
||||||
"""
|
"""
|
||||||
|
|
@ -402,7 +402,7 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
similarity_rules['distinctions'].append('distance')
|
similarity_rules['distinctions'].append('distance')
|
||||||
|
|
||||||
return base_qs.order_by(*similarity_rules['ordering']) \
|
return base_qs.order_by(*similarity_rules['ordering']) \
|
||||||
.distinct(*similarity_rules['distinctions'], 'id')
|
.distinct(*similarity_rules['distinctions'], 'id')
|
||||||
|
|
||||||
def last_reviewed(self, point: Point):
|
def last_reviewed(self, point: Point):
|
||||||
"""
|
"""
|
||||||
|
|
@ -653,7 +653,6 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
|
||||||
country = self.address.city.country
|
country = self.address.city.country
|
||||||
return country.low_price, country.high_price
|
return country.low_price, country.high_price
|
||||||
|
|
||||||
|
|
||||||
def set_establishment_type(self, establishment_type):
|
def set_establishment_type(self, establishment_type):
|
||||||
self.establishment_type = establishment_type
|
self.establishment_type = establishment_type
|
||||||
self.establishment_subtypes.exclude(
|
self.establishment_subtypes.exclude(
|
||||||
|
|
@ -991,6 +990,15 @@ class EmployeeQuerySet(models.QuerySet):
|
||||||
"""Search by name or last_name."""
|
"""Search by name or last_name."""
|
||||||
return self._generic_search(value, ['name', 'last_name'])
|
return self._generic_search(value, ['name', 'last_name'])
|
||||||
|
|
||||||
|
def search_by_position_id(self, value):
|
||||||
|
"""Search by position_id."""
|
||||||
|
return self.filter(
|
||||||
|
Q(establishmentemployee__position_id=value),
|
||||||
|
Q(establishmentemployee__from_date__lte=datetime.now()),
|
||||||
|
Q(establishmentemployee__to_date__gte=datetime.now()) |
|
||||||
|
Q(establishmentemployee__to_date__isnull=True)
|
||||||
|
)
|
||||||
|
|
||||||
def actual_establishment(self):
|
def actual_establishment(self):
|
||||||
e = EstablishmentEmployee.objects.actual().filter(employee=self)
|
e = EstablishmentEmployee.objects.actual().filter(employee=self)
|
||||||
return self.prefetch_related(models.Prefetch('establishmentemployee_set',
|
return self.prefetch_related(models.Prefetch('establishmentemployee_set',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user