diff --git a/pms/filters.py b/pms/filters.py index 8dd47f679..96e250bc5 100644 --- a/pms/filters.py +++ b/pms/filters.py @@ -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: diff --git a/pms/methods.py b/pms/methods.py index ce1823729..5a5bced00 100644 --- a/pms/methods.py +++ b/pms/methods.py @@ -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 diff --git a/pms/views.py b/pms/views.py index 15f834900..97e098aa7 100644 --- a/pms/views.py +++ b/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 )