[UPDT] EMPLOYEE: Employee filter method

This commit is contained in:
Horilla
2024-01-29 15:05:27 +05:30
parent 7295454628
commit 00f0ade214
8 changed files with 1348 additions and 835 deletions

View File

@@ -324,9 +324,12 @@ def get_nested_instances(model, field_names, field_values):
related_model = related_field.remote_field.model
except:
pass
field_values = [int(value) for value in field_values]
related_instances = related_model.objects.filter(id__in=field_values)
return [str(instance) for instance in related_instances]
object_ids = [int(value) for value in field_values if value != "not_set"]
related_instances = related_model.objects.filter(id__in=object_ids)
result = [str(instance) for instance in related_instances]
if "not_set" in field_values:
result.insert(0, "not_set")
return result
except (ObjectDoesNotExist, ValueError):
return None

View File

@@ -301,3 +301,14 @@ _("employee-create-personal-info"),
_("offboarding"),
_("offboarding-pipeline"),
_("pagination-settings-view"),
_("organisation-chart"),
_("document-request-view"),
_("disciplinary-actions"),
_("view-policies"),
_("resignation-requests-view"),
_("action-type"),
_("general-settings"),
_(""),
_(""),
_(""),
_(""),

View File

@@ -4,6 +4,10 @@ filters.py
This page is used to register filter for employee models
"""
import datetime
import django
from attendance.models import Attendance
from employee.models import DisciplinaryAction, Policy
import uuid
from django import forms
@@ -69,6 +73,9 @@ class EmployeeFilter(FilterSet):
(False, "No"),
],
)
working_today = django_filters.BooleanFilter(
label="Working", method="get_working_today"
)
not_in_yet = django_filters.DateFilter(
method="not_in_yet_func",
@@ -135,18 +142,43 @@ class EmployeeFilter(FilterSet):
"""
Override the default filtering behavior to handle None option.
"""
from django.db.models import Q
data = self.form.cleaned_data
not_set_dict = {key: value for key, value in data.items() if value == "not_set"}
not_set_dict = {}
for key, value in data.items():
if isinstance(value,(list,django.db.models.query.QuerySet)):
if value and "not_set" in value:
not_set_dict[key] = value
if not_set_dict:
filtered_data = queryset
for key, value in not_set_dict.items():
not_set = f"{key}__isnull"
filtered_data = filtered_data.filter(**{not_set: True})
return filtered_data
q_objects = Q()
for key, values in not_set_dict.items():
for value in values:
if value == "not_set":
q_objects |= Q(**{f"{key}__isnull": True})
else:
q_objects |= Q(**{key: value})
return queryset.filter(q_objects)
return super().filter_queryset(queryset)
# Continue with the default behavior for other filters
def get_working_today(self, queryset, _, value):
today = datetime.datetime.now().date()
yesterday = today - datetime.timedelta(days=1)
working_employees = Attendance.objects.filter(
attendance_date__gte=yesterday,
attendance_date__lte=today,
attendance_clock_out_date__isnull=True,
).values_list("employee_id", flat=True)
if value:
queryset = queryset.filter(id__in=working_employees)
else:
queryset = queryset.exclude(id__in=working_employees)
return queryset
def filter_by_name(self, queryset, _, value):
"""
Filter queryset by first name or last name.
@@ -207,7 +239,7 @@ class EmployeeFilter(FilterSet):
self.model_choice_filters = [
filter
for filter in self.filters.values()
if isinstance(filter, django_filters.ModelChoiceFilter)
if isinstance(filter, django_filters.ModelMultipleChoiceFilter)
]
for model_choice_filter in self.model_choice_filters:
queryset = (
@@ -216,14 +248,19 @@ class EmployeeFilter(FilterSet):
else model_choice_filter.queryset
)
choices = [
("", "---------"),
("not_set", _("Not Set")),
]
choices.extend([(obj.id, str(obj)) for obj in queryset])
self.form.fields[model_choice_filter.field_name] = forms.ChoiceField(
if (
model_choice_filter.field_name != "user_permissions"
and model_choice_filter.field_name != "groups"
):
self.form.fields[
model_choice_filter.field_name
] = forms.MultipleChoiceField(
choices=choices,
required=False,
widget=forms.Select(
widget=forms.SelectMultiple(
attrs={
"class": "oh-select oh-select-2 select2-hidden-accessible",
"id": uuid.uuid4(),
@@ -307,7 +344,6 @@ class DisciplinaryActionFilter(FilterSet):
)
class Meta:
model = DisciplinaryAction
fields = [
"employee_id",

View File

@@ -271,7 +271,7 @@ urlpatterns = [
views.document_delete,
name="document-delete",
),
path("organisation-chart", views.organisation_chart, name="organisation-chart"),
path("organisation-chart/", views.organisation_chart, name="organisation-chart"),
path("delete-policies",policies.delete_policies,name="delete-policies"),

View File

@@ -4,7 +4,12 @@ filters.py
import uuid
import django_filters
from django import forms
from django.db import models
from base.methods import reload_queryset
from django_filters.filterset import FILTER_FOR_DBFIELD_DEFAULTS
FILTER_FOR_DBFIELD_DEFAULTS[models.ForeignKey]["filter_class"]=django_filters.ModelMultipleChoiceFilter
def filter_by_name(queryset, name, value):
"""

File diff suppressed because it is too large Load Diff

View File

@@ -96,6 +96,12 @@ sidebar_urls = [
"date-settings",
"offboarding-pipeline",
"pagination-settings-view",
"organisation-chart",
"disciplinary-actions",
"view-policies",
"resignation-requests-view",
"action-type",
"general-settings",
]
remove_urls = [
"objective-detailed-view",

View File

@@ -39,7 +39,7 @@ urlpatterns = [
views.offboarding_individual_view,
name="offboarding-individual-view",
),
path("requests-view", views.request_view, name="resignation-request-view"),
path("resignation-requests-view/", views.request_view, name="resignation-request-view"),
path(
"create-resignation-request",
views.create_resignation_request,