diff --git a/apps/establishment/filters.py b/apps/establishment/filters.py index 11f150b0..71084d9c 100644 --- a/apps/establishment/filters.py +++ b/apps/establishment/filters.py @@ -70,6 +70,7 @@ class EmployeeBackFilter(filters.FilterSet): position_id = filters.NumberFilter(method='search_by_actual_position_id') public_mark = filters.NumberFilter(method='search_by_public_mark') toque_number = filters.NumberFilter(field_name='toque_number') + username = filters.CharFilter(method='search_by_username_or_name') class Meta: """Meta class.""" @@ -80,6 +81,7 @@ class EmployeeBackFilter(filters.FilterSet): 'position_id', 'public_mark', 'toque_number', + 'username', ) def search_by_name_or_last_name(self, queryset, name, value): @@ -100,6 +102,12 @@ class EmployeeBackFilter(filters.FilterSet): return queryset.search_by_public_mark(value) return queryset + def search_by_username_or_name(self, queryset, name, value): + """Search by username or name.""" + if value not in EMPTY_VALUES: + return queryset.search_by_username_or_name(value) + return queryset + class EmployeeBackSearchFilter(EmployeeBackFilter): def search_by_name_or_last_name(self, queryset, name, value): diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 867ea960..80ac27c2 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -998,22 +998,32 @@ class EmployeeQuerySet(models.QuerySet): """Search by name or last_name.""" return self._generic_search(value, ['name', 'last_name']) - def search_by_position_id(self, value): - """Search by position_id.""" + def search_by_actual_employee(self): + """Search by actual employee.""" 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 search_by_position_id(self, value): + """Search by position_id.""" + return self.search_by_actual_employee().filter( + Q(establishmentemployee__position_id=value), + ) + def search_by_public_mark(self, value): """Search by establishment public_mark.""" - return self.filter( + return self.search_by_actual_employee().filter( Q(establishmentemployee__establishment__public_mark=value), - Q(establishmentemployee__from_date__lte=datetime.now()), - Q(establishmentemployee__to_date__gte=datetime.now()) | - Q(establishmentemployee__to_date__isnull=True) + ) + + def search_by_username_or_name(self, value): + """Search by username or name.""" + return self.search_by_actual_employee().filter( + Q(user__username__icontains=value) | + Q(user__first_name__icontains=value) | + Q(user__last_name__icontains=value) ) def actual_establishment(self):