[ADD] PMS: Anonymous feedback filter
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
26
pms/views.py
26
pms/views.py
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user