Files
ihrm/helpdesk/filter.py

194 lines
4.5 KiB
Python

"""
filters.py
This page is used to register filter for employee models
"""
import django_filters
from django import forms
from django.utils.translation import gettext_lazy as _
from django_filters import CharFilter, DateFilter
from base.models import Tags
from helpdesk.models import FAQ, DepartmentManager, FAQCategory, Ticket, TicketType
from horilla.filters import FilterSet, HorillaFilterSet
class FAQFilter(FilterSet):
"""
Filter set class for FAQ model
Args:
FilterSet (class): custom filter set class to apply styling
"""
search = CharFilter(field_name="question", lookup_expr="icontains")
class Meta:
"""
Meta class to add the additional info
"""
model = FAQ
fields = [
"search",
"tags",
]
class FAQCategoryFilter(FilterSet):
"""
Filter set class for FAQ category model
Args:
FilterSet (class): custom filter set class to apply styling
"""
search = CharFilter(field_name="title", lookup_expr="icontains")
class Meta:
"""
Meta class to add the additional info
"""
model = FAQCategory
fields = [
"search",
]
class TicketFilter(FilterSet):
"""
Filter set class for Ticket model
Args:
FilterSet (class): custom filter set class to apply styling
"""
search = CharFilter(field_name="title", lookup_expr="icontains")
from_date = DateFilter(
field_name="deadline",
lookup_expr="gte",
widget=forms.DateInput(attrs={"type": "date"}),
)
to_date = DateFilter(
field_name="deadline",
lookup_expr="lte",
widget=forms.DateInput(attrs={"type": "date"}),
)
pipeline_status = django_filters.CharFilter(
field_name="status",
)
class Meta:
"""
Meta class to add the additional info
"""
model = Ticket
fields = [
"title",
"tags",
"employee_id",
"ticket_type",
"priority",
"deadline",
"assigned_to",
"status",
"is_active",
]
class TicketReGroup:
"""
Class to keep the field name for group by option
"""
fields = [
("", "Select"),
("employee_id", _("Owner")),
("ticket_type", _("Ticket Type")),
("status", _("Status")),
("priority", _("Priority")),
("tags", _("Tags")),
("assigned_to", _("Assigner")),
("employee_id__employee_work_info__company_id", _("Company")),
]
class TicketTypeFilter(FilterSet):
search = CharFilter(method="search_method")
def search_method(self, queryset, _, value):
"""
This method is used to search employees and objective
"""
return (
queryset.filter(title__icontains=value)
| queryset.filter(type__icontains=value)
| queryset.filter(prefix__icontains=value)
).distinct()
class Meta:
model = TicketType
fields = ["title", "type", "prefix"]
class TagsFilter(FilterSet):
search = CharFilter(method="search_method")
def search_method(self, queryset, _, value):
"""
This method is used to search employees and objective
"""
return (queryset.filter(title__icontains=value)).distinct()
class Meta:
model = Tags
fields = [
"title",
]
class DepartmentManagerFilter(HorillaFilterSet):
search = django_filters.CharFilter(method="search_method")
search_field = django_filters.CharFilter(method="search_in")
class Meta:
model = DepartmentManager
fields = ["department", "manager"]
def search_method(self, queryset, _, value):
"""
This method is used to search employees and objective
"""
return (
(queryset.filter(department__department__icontains=value))
| queryset.filter(manager__employee_first_name__icontains=value)
).distinct()
class FaqSearch(FilterSet):
search = CharFilter(method="search_method", lookup_expr="icontains")
class Meta:
model = FAQ
fields = ["search"]
def search_method(self, queryset, _, value):
"""
This method is used to add custom search condition
"""
return (
queryset.filter(question__icontains=value)
| queryset.filter(answer__icontains=value)
| queryset.filter(tags__title__icontains=value)
).distinct()