[UPDT] PMS: Subbordinates,collegue,manager change according to the employee selected
This commit is contained in:
43
pms/forms.py
43
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):
|
||||
"""
|
||||
|
||||
@@ -61,20 +61,6 @@ $(document).ready(function () {
|
||||
.trigger("change");
|
||||
});
|
||||
|
||||
if (reporting_manager) {
|
||||
// assigning the reporting manager of the employee
|
||||
var options = $(
|
||||
`<option value=" ${reporting_manager.id}" selected="selected">`
|
||||
).text(
|
||||
`${reporting_manager.employee_first_name}${reporting_manager.employee_last_name}`
|
||||
);
|
||||
$("#id_manager_id").append(options).trigger("change");
|
||||
} else {
|
||||
var options = $(
|
||||
`<option value=" " selected="selected">`
|
||||
).text(`---------`);
|
||||
$("#id_manager_id").append(options).trigger("change");
|
||||
}
|
||||
},
|
||||
error: (error) => {
|
||||
console.log(error);
|
||||
|
||||
4
pms/templates/feedback/employees_select.html
Normal file
4
pms/templates/feedback/employees_select.html
Normal file
@@ -0,0 +1,4 @@
|
||||
{% for employee in employees %}
|
||||
<option value="{{ employee.0 }}">{{ employee.1 }}</option>
|
||||
{% endfor %}
|
||||
|
||||
@@ -185,7 +185,26 @@
|
||||
<!-- end of period modal -->
|
||||
|
||||
</main>
|
||||
<button id="colleguesButton" hx-get="{% url 'get-collegues' %}" hx-target="#id_colleague_id" hidden > </button>
|
||||
<button id="managerButton" hx-get="{% url 'get-collegues' %}" hx-target="#id_manager_id" hidden > </button>
|
||||
<button id="subordinatesButton" hx-get="{% url 'get-collegues' %}" hx-target="#id_subordinate_id" hidden > </button>
|
||||
<script>
|
||||
function get_collegues(element) {
|
||||
var employee_id = $(element).val();
|
||||
|
||||
// Check if the employee_id is valid
|
||||
if (employee_id) {
|
||||
// Dynamically set the hx-vals attribute for the manager button
|
||||
$('#managerButton').attr('hx-vals', JSON.stringify({ employee_id: employee_id, data: 'manager' })).click();
|
||||
// Dynamically set the hx-vals attribute for the colleagues button
|
||||
$('#colleguesButton').attr('hx-vals', JSON.stringify({ employee_id: employee_id, data: 'colleagues' })).click();
|
||||
// Dynamically set the hx-vals attribute for the subordinates button
|
||||
$('#subordinatesButton').attr('hx-vals', JSON.stringify({ employee_id: employee_id, data: 'subordinates' })).click();
|
||||
} else {
|
||||
console.error('Invalid employee_id');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script src="{% static 'src/feedback/feedback_creation.js' %}"></script>
|
||||
<script src="{% static 'src/period/period.js' %}"></script>
|
||||
|
||||
|
||||
@@ -133,6 +133,7 @@ urlpatterns = [
|
||||
path("feedback-update/<int:id>", views.feedback_update, name="feedback-update"),
|
||||
path("feedback-delete/<int:id>", views.feedback_delete, name="feedback-delete"),
|
||||
path("feedback-archive/<int:id>", views.feedback_archive, name="feedback-archive"),
|
||||
path("get-collegues", views.get_collegues, name="get-collegues"),
|
||||
path(
|
||||
"feedback-answer-get/<int:id>",
|
||||
views.feedback_answer_get,
|
||||
|
||||
99
pms/views.py
99
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
|
||||
|
||||
Reference in New Issue
Block a user