[ADD] PMS: Anonymous feedback filter

This commit is contained in:
Horilla
2025-01-08 10:33:48 +05:30
parent d827f6c807
commit 0d4e908689
3 changed files with 60 additions and 8 deletions

View File

@@ -15,6 +15,7 @@ from django_filters import DateFilter
from base.filters import FilterSet
from base.methods import reload_queryset
from pms.models import (
AnonymousFeedback,
BonusPointSetting,
EmployeeBonusPoint,
EmployeeKeyResult,
@@ -237,6 +238,34 @@ class FeedbackFilter(CustomFilterSet):
)
class AnonymousFeedbackFilter(django_filters.FilterSet):
"""
Custom filter set for AnonymousFeedback records.
This filter set allows to filter AnonymousFeedback records based on various criteria.
"""
created_at_date_range = DateRangeFilter(field_name="created_at")
start_date = django_filters.DateFilter(
field_name="created_at",
lookup_expr="gte",
widget=forms.DateInput(attrs={"type": "date"}),
)
end_date = django_filters.DateFilter(
field_name="created_at",
lookup_expr="lte",
widget=forms.DateInput(attrs={"type": "date"}),
)
class Meta:
"""
A nested class that specifies the model and fields for the filter.
"""
model = AnonymousFeedback
fields = "__all__"
class KeyResultFilter(CustomFilterSet):
class Meta:

View File

@@ -4,7 +4,7 @@ from django.shortcuts import render
from pyexpat.errors import messages
from employee.models import EmployeeWorkInformation
from pms.models import EmployeeObjective, Objective
from pms.models import AnonymousFeedback, EmployeeObjective, Objective
decorator_with_arguments = (
lambda decorator: lambda *args, **kwargs: lambda func: decorator(
@@ -112,3 +112,14 @@ def check_permission_feedback_detailed_view(request, feedback, perm):
)
return has_permission
def get_anonymous_feedbacks(employee):
department = employee.get_department()
job_position = employee.get_job_position()
anonymous_feedbacks = (
AnonymousFeedback.objects.filter(department_id=department)
| AnonymousFeedback.objects.filter(job_position_id=job_position)
| AnonymousFeedback.objects.filter(employee_id=employee)
)
return anonymous_feedbacks

View File

@@ -49,6 +49,7 @@ from notifications.signals import notify
from pms.filters import (
ActualKeyResultFilter,
ActualObjectiveFilter,
AnonymousFeedbackFilter,
EmployeeObjectiveFilter,
FeedbackFilter,
KeyResultFilter,
@@ -74,6 +75,7 @@ from pms.forms import (
)
from pms.methods import (
check_permission_feedback_detailed_view,
get_anonymous_feedbacks,
pms_owner_and_manager_can_enter,
)
from pms.models import (
@@ -1603,7 +1605,9 @@ def filter_pagination_feedback(
feedback_filter_all = FeedbackFilter(
request.GET or initial_data, queryset=all_feedback
)
anonymous_feedback = anonymous_feedback
anonymous_feedback = AnonymousFeedbackFilter(
request.GET, queryset=anonymous_feedback
).qs
feedback_paginator_own = Paginator(feedback_filter_own.qs, get_pagination())
feedback_paginator_requested = Paginator(
feedback_filter_requested.qs, get_pagination()
@@ -1668,11 +1672,16 @@ def feedback_list_search(request):
all_feedback = Feedback.objects.filter(manager_id=employee_id).filter(
review_cycle__icontains=feedback
)
# Anonymous feedbacks
anonymous_feedback = (
AnonymousFeedback.objects.filter(employee_id=employee_id)
AnonymousFeedback.objects.filter(
anonymous_feedback_id=request.user.id, archive=False
)
if not request.user.has_perm("pms.view_feedback")
else AnonymousFeedback.objects.all()
else AnonymousFeedback.objects.filter(archive=False)
)
related_anonymous_feedbacks = get_anonymous_feedbacks(employee_id)
anonymous_feedback = (related_anonymous_feedbacks | anonymous_feedback).distinct()
context = filter_pagination_feedback(
request, self_feedback, requested_feedback, all_feedback, anonymous_feedback
@@ -1708,13 +1717,16 @@ def feedback_list_view(request):
feedback_all = Feedback.objects.filter(manager_id=employee, archive=False)
# Anonymous feedbacks
anonymous_feedback = (
AnonymousFeedback.objects.filter(employee_id=employee, archive=False)
AnonymousFeedback.objects.filter(
anonymous_feedback_id=request.user.id, archive=False
)
if not request.user.has_perm("pms.view_feedback")
else AnonymousFeedback.objects.filter(archive=False)
)
anonymous_feedback = anonymous_feedback | AnonymousFeedback.objects.filter(
anonymous_feedback_id=request.user.id, archive=False
)
related_anonymous_feedbacks = get_anonymous_feedbacks(employee)
anonymous_feedback = (
related_anonymous_feedbacks.filter(archive=False) | anonymous_feedback
).distinct()
context = filter_pagination_feedback(
request, feedback_own, feedback_requested, feedback_all, anonymous_feedback
)