diff --git a/pms/forms.py b/pms/forms.py
index b3d067b52..8431a0187 100644
--- a/pms/forms.py
+++ b/pms/forms.py
@@ -19,9 +19,13 @@ from django.utils.translation import gettext_lazy as _
from base.forms import ModelForm as BaseForm
from base.forms import ModelForm as MF
-from base.methods import reload_queryset
+from base.methods import (
+ filtersubordinatesemployeemodel,
+ is_reportingmanager,
+ reload_queryset,
+)
from employee.filters import EmployeeFilter
-from employee.models import Department, JobPosition
+from horilla import horilla_middlewares
from horilla_widgets.widgets.horilla_multi_select_field import HorillaMultiSelectField
from horilla_widgets.widgets.select_widgets import HorillaMultiSelectWidget
from pms.models import (
@@ -734,11 +738,10 @@ class FeedbackForm(ModelForm):
Initializes the feedback form instance.
If an instance is provided, sets the initial value for the form's date fields.
"""
-
+ request = getattr(horilla_middlewares._thread_locals, "request", None)
instance = kwargs.get("instance")
- employee = kwargs.pop(
- "employee", None
- ) # access the logged-in user's information
+ employee = kwargs.pop("employee", None)
+
if instance:
kwargs["initial"] = set_date_field_initial(instance)
super().__init__(*args, **kwargs)
@@ -757,23 +760,19 @@ class FeedbackForm(ModelForm):
self.fields["period"].choices = list(self.fields["period"].choices)
self.fields["period"].choices.append(("create_new_period", "Create new period"))
- if instance:
- self.fields["employee_id"].widget.attrs.update(
- {"class": "oh-select oh-select-2"}
- )
- employees = Employee.objects.filter(
- is_active=True, employee_work_info__reporting_manager_id=employee
+ self.fields["employee_id"].widget.attrs.update(
+ {"onchange": "get_collegues($(this))"}
)
- if employee and employees:
- department = employee.employee_work_info.department_id
- employees = Employee.objects.filter(
- is_active=True, employee_work_info__department_id=department
- )
- # manager level access
- self.fields["employee_id"].queryset = employees
- self.fields["manager_id"].queryset = employees
- self.fields["colleague_id"].queryset = employees
- self.fields["subordinate_id"].queryset = employees
+ if request.user.has_perm("pms.add_period"):
+ employees = Employee.objects.all()
+ elif is_reportingmanager(request):
+ # Queryset of subordinate employees
+ employees = filtersubordinatesemployeemodel(request, Employee.objects.all())
+ # managers queryset
+ managers = Employee.objects.filter(id=employee.id)
+ self.fields["manager_id"].queryset = managers
+
+ self.fields["employee_id"].queryset = employees
def clean(self):
"""
diff --git a/pms/static/src/feedback/feedback_creation.js b/pms/static/src/feedback/feedback_creation.js
index 3ec6271c8..b028d948a 100644
--- a/pms/static/src/feedback/feedback_creation.js
+++ b/pms/static/src/feedback/feedback_creation.js
@@ -61,20 +61,6 @@ $(document).ready(function () {
.trigger("change");
});
- if (reporting_manager) {
- // assigning the reporting manager of the employee
- var options = $(
- `
+{% endfor %}
+
\ No newline at end of file
diff --git a/pms/templates/feedback/feedback_creation.html b/pms/templates/feedback/feedback_creation.html
index 337dd15e8..a27731f2d 100644
--- a/pms/templates/feedback/feedback_creation.html
+++ b/pms/templates/feedback/feedback_creation.html
@@ -185,7 +185,26 @@
+
+
+
+
diff --git a/pms/urls.py b/pms/urls.py
index 326aba601..64b84fc25 100644
--- a/pms/urls.py
+++ b/pms/urls.py
@@ -133,6 +133,7 @@ urlpatterns = [
path("feedback-update/", views.feedback_update, name="feedback-update"),
path("feedback-delete/", views.feedback_delete, name="feedback-delete"),
path("feedback-archive/", views.feedback_archive, name="feedback-archive"),
+ path("get-collegues", views.get_collegues, name="get-collegues"),
path(
"feedback-answer-get/",
views.feedback_answer_get,
diff --git a/pms/views.py b/pms/views.py
index 28e940b1d..48900a1f0 100644
--- a/pms/views.py
+++ b/pms/views.py
@@ -19,6 +19,7 @@ from django.db.utils import IntegrityError
from django.forms import modelformset_factory
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.shortcuts import get_object_or_404, redirect, render
+from django.template.loader import render_to_string
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
@@ -1733,25 +1734,20 @@ def feedback_list_view(request):
it will return the filtered and searched object.
"""
user = request.user
- employee = Employee.objects.filter(employee_user_id=user).first()
- feedback_requested_ids = Feedback.objects.filter(
- Q(manager_id=employee, manager_id__is_active=True)
- | Q(colleague_id=employee, colleague_id__is_active=True)
- | Q(subordinate_id=employee, subordinate_id__is_active=True)
- ).values_list("id", flat=True)
- feedback_own = Feedback.objects.filter(employee_id=employee).filter(
- archive=False, employee_id__is_active=True
- )
- feedback_requested = Feedback.objects.filter(pk__in=feedback_requested_ids).filter(
- archive=False, employee_id__is_active=True
- )
- feedback_all = Feedback.objects.all().filter(
- Q(
- manager_id=employee,
- manager_id__is_active=True,
- archive=False,
- )
+ employee = user.employee_get
+ # filter own feedbacks (self feedbacks)
+ feedback_own = Feedback.objects.filter(
+ employee_id=employee,
+ archive=False,
)
+ # feedbacks to answer
+ feedback_requested = Feedback.objects.filter(
+ Q(manager_id=employee) | Q(colleague_id=employee) | Q(subordinate_id=employee)
+ ).distinct()
+
+ # feedbacks to review if employee is a manager
+ feedback_all = Feedback.objects.all().filter(Q(manager_id=employee, archive=False))
+ # Anonymous feedbacks
anonymous_feedback = (
AnonymousFeedback.objects.filter(employee_id=employee, archive=False)
if not request.user.has_perm("pms.view_feedback")
@@ -1760,26 +1756,11 @@ def feedback_list_view(request):
anonymous_feedback = anonymous_feedback | AnonymousFeedback.objects.filter(
anonymous_feedback_id=request.user.id, archive=False
)
- employees = Employee.objects.filter(
- employee_work_info__reporting_manager_id=employee, is_active=True
- ) # checking the user is reporting manager or not
- feedback_available = Feedback.objects.all()
- if request.user.has_perm("pms.view_feedback"):
- context = filter_pagination_feedback(
- request, feedback_own, feedback_requested, feedback_all, anonymous_feedback
- )
- elif employees:
- # based on the reporting manager
- feedback_all = Feedback.objects.filter(employee_id__in=employees)
- context = filter_pagination_feedback(
- request, feedback_own, feedback_requested, feedback_all, anonymous_feedback
- )
- else:
- feedback_all = Feedback.objects.none()
- context = filter_pagination_feedback(
- request, feedback_own, feedback_requested, feedback_all, anonymous_feedback
- )
- if feedback_available.exists():
+ context = filter_pagination_feedback(
+ request, feedback_own, feedback_requested, feedback_all, anonymous_feedback
+ )
+ # checking condition for empty page
+ if Feedback.objects.all().exists():
template = "feedback/feedback_list_view.html"
else:
template = "feedback/feedback_empty.html"
@@ -2065,6 +2046,48 @@ def feedback_archive(request, id):
return redirect(feedback_list_view)
+@login_required
+def get_collegues(request):
+ """
+ Get collegues and subordinates for the manager.
+ """
+ try:
+ employee_id = request.GET.get("employee_id")
+ employee = Employee.objects.get(id=int(employee_id)) if employee_id else None
+
+ if employee:
+ if request.GET.get("data") == "colleagues":
+ department = employee.get_department()
+ # Get employees in the same department as the employee
+ employees_queryset = Employee.objects.filter(
+ is_active=True, employee_work_info__department_id=department
+ ).values_list("id", "employee_first_name")
+ elif request.GET.get("data") == "manager":
+ reporting_manager = (
+ employee.employee_work_info.reporting_manager_id
+ if employee.employee_work_info
+ else None
+ )
+ employees_queryset = Employee.objects.filter(
+ id=reporting_manager.id
+ ).values_list("id", "employee_first_name")
+ elif request.GET.get("data") == "subordinates":
+ employees_queryset = Employee.objects.filter(
+ is_active=True, employee_work_info__reporting_manager_id=employee
+ ).values_list("id", "employee_first_name")
+ # Convert QuerySets to a list
+ employees = list(employees_queryset)
+ context = {"employees": employees}
+ employee_html = render_to_string("feedback/employees_select.html", context)
+ return HttpResponse(employee_html)
+ else:
+ return JsonResponse({"error": "Employee not found"}, status=404)
+ except Employee.DoesNotExist:
+ return JsonResponse({"error": "Invalid Employee ID"}, status=400)
+ except Exception as e:
+ return JsonResponse({"error": str(e)}, status=500)
+
+
@login_required
def feedback_status(request):
"""this function is used to un-archive the feedback