From 4be6d523088fafee8038ddc5ec2b9ce089d6ffce Mon Sep 17 00:00:00 2001 From: Horilla Date: Thu, 15 Feb 2024 12:10:58 +0530 Subject: [PATCH] [FIX] LEAVE: Leave chart tile redirection and unwanted labels in the pie chart --- leave/static/dashboard/dashboard.js | 3 - leave/templates/leave/dashboard.html | 25 +++-- leave/templates/leave/employee_dashboard.html | 35 +++---- .../dashboard_leave_requests.html | 91 +++++++++++++++++++ leave/views.py | 73 +++++++++++---- 5 files changed, 182 insertions(+), 45 deletions(-) create mode 100644 leave/templates/leave/leave_request/dashboard_leave_requests.html diff --git a/leave/static/dashboard/dashboard.js b/leave/static/dashboard/dashboard.js index 704ece5f7..3f5a74874 100644 --- a/leave/static/dashboard/dashboard.js +++ b/leave/static/dashboard/dashboard.js @@ -383,7 +383,4 @@ $(document).ready(function () { }); }); - $(".filter").on("click", function () { - $("#back_button").removeClass("d-none"); - }); }); diff --git a/leave/templates/leave/dashboard.html b/leave/templates/leave/dashboard.html index 4168ca19c..ec78ef56a 100644 --- a/leave/templates/leave/dashboard.html +++ b/leave/templates/leave/dashboard.html @@ -34,9 +34,9 @@
-
+
- {% trans "New Requests" %} + {% trans "Requests to Approve" %}
@@ -46,9 +46,9 @@
-
+
- {% trans "Approved Requests" %} + {% trans "Approved Leaves In This Month" %}
@@ -58,9 +58,9 @@
-
+
- {% trans "Rejected Requests" %} + {% trans "Rejected Leaves In This Month" %}
@@ -259,5 +259,18 @@
+ {% endblock %} \ No newline at end of file diff --git a/leave/templates/leave/employee_dashboard.html b/leave/templates/leave/employee_dashboard.html index 03f48fd55..ede83adea 100644 --- a/leave/templates/leave/employee_dashboard.html +++ b/leave/templates/leave/employee_dashboard.html @@ -14,24 +14,11 @@ }
-
-
+
{% trans "New Requests" %}
@@ -45,7 +32,7 @@
-
+
{% trans "Approved Requests" %}
@@ -57,7 +44,7 @@
-
+
{% trans "Rejected Requests" %}
@@ -88,7 +75,7 @@
- {% include 'leave/leave_request/leave_requests.html' %} + {% include 'leave/leave_request/dashboard_leave_requests.html' %}
@@ -161,4 +148,18 @@ + {% endblock %} \ No newline at end of file diff --git a/leave/templates/leave/leave_request/dashboard_leave_requests.html b/leave/templates/leave/leave_request/dashboard_leave_requests.html new file mode 100644 index 000000000..b66b015a8 --- /dev/null +++ b/leave/templates/leave/leave_request/dashboard_leave_requests.html @@ -0,0 +1,91 @@ +{% load i18n %} +{% load static %} +{% load basefilters %} +{% load attendancefilters %} +{% include 'filter_tags.html' %} +{% if leave_requests %} +
+
+
+
+
{% trans "Employee" %}
+
{% trans "Leave Type" %}
+
{% trans "Start Date" %}
+
{% trans "End Date" %}
+
{% trans "Requested Days" %}
+
{% trans "Status" %}
+
{% trans "Actions" %}
+
+
+
+ {% for leave_request in leave_requests %} +
+ +
+
+
+ +
+ {{leave_request.employee_id}} +
+
+
{{leave_request.leave_type_id}}
+
{{leave_request.start_date}}
+
{{leave_request.end_date}}
+
{{leave_request.requested_days}}
+
+ {% if leave_request.multiple_approvals and leave_request.status == "requested" %} +
+ {{leave_request.multiple_approvals.approved|length}} / {{leave_request.multiple_approvals.managers|length}} {% trans "Approved" %} +
+ {% else %} + {{leave_request.get_status_display}} + {% endif %} +
+
+
+ {% if leave_request.is_approved and leave_request.status == 'requested' and leave_request.end_date >= current_date %} + current_date.month %} onclick = "leaveRequestConfirm('This leave request is for the month of {{leave_request.start_date|date:'F'}}. Approval depends on the {{leave_request.employee_id.get_full_name}} having available leave days for this month.',event);" {% else %} onclick = "return confirm('Do You really want to Approve this request?')"; {% endif %}> + + + {% else %} + + + + {% endif %} + {% if leave_request.status != 'rejected' and leave_request.end_date >= current_date %} + + + + + {% else %} + + + + + {% endif %} +
+
+
+ {% endfor %} + +
+
+
+ {% else %} +
+
+ +

{% trans "You have No leave requests for this month." %}

+
+
+{% endif %} diff --git a/leave/views.py b/leave/views.py index ce39dc2e3..ca0428c1a 100644 --- a/leave/views.py +++ b/leave/views.py @@ -41,6 +41,7 @@ from leave.forms import * from leave.decorators import * from leave.filters import * from employee.models import Employee +from attendance.methods.group_by import group_by_queryset from .methods import ( calculate_requested_days, leave_requested_dates, @@ -865,6 +866,15 @@ def leave_assign_view(request): export_filter = AssignedLeaveFilter() export_column = AvailableLeaveColumnExportForm() assign_form = AssignLeaveForm() + + # default group by configuration + data_dict = {"field":["leave_type_id"]} + + # to check condition on the template + setattr(request.GET,"field",True) + + page_obj = group_by_queryset(queryset.order_by("-id"),"leave_type_id",page_number) + return render( request, "leave/leave_assign/assign_view.html", @@ -874,6 +884,7 @@ def leave_assign_view(request): "export_filter": export_filter, "export_column": export_column, "pd": previous_data, + "filter_dict":data_dict, "gp_fields": LeaveAssignReGroup.fields, "assign_form": assign_form, }, @@ -901,12 +912,15 @@ def leave_assign_filter(request): field = request.GET.get("field") page_number = request.GET.get("page") template = ("leave/leave_assign/assigned_leave.html",) + available_leaves = assigned_leave_filter.order_by("-id") + if request.GET.get("sortby"): + available_leaves = sortby(request,available_leaves,"sortby") if field != "" and field is not None: - field_copy = field.replace(".", "__") - assigned_leave_filter = assigned_leave_filter.order_by(field_copy) + page_obj = group_by_queryset(available_leaves,field,page_number) template = "leave/leave_assign/group_by.html" + else: + page_obj = paginator_qry(available_leaves, page_number) - page_obj = paginator_qry(assigned_leave_filter.order_by("-id"), page_number) data_dict = parse_qs(previous_data) get_key_instances(AvailableLeave, data_dict) return render( @@ -2104,8 +2118,8 @@ def dashboard(request): today = date.today() leave_requests = LeaveRequest.objects.filter(start_date__month=today.month) requested = LeaveRequest.objects.filter(status="requested") - approved = LeaveRequest.objects.filter(status="approved") - rejected = LeaveRequest.objects.filter(status="rejected") + approved = LeaveRequest.objects.filter(status="approved",start_date__month=today.month) + rejected = LeaveRequest.objects.filter(status="rejected",start_date__month=today.month) holidays = Holiday.objects.filter(start_date__gte=today) next_holiday = ( holidays.order_by("start_date").first() if holidays.exists() else None @@ -2132,6 +2146,8 @@ def dashboard(request): "holidays": holidays, "leave_today_employees": leave_today, "dashboard": "dashboard", + "first_day":today.replace(day=1).strftime("%Y-%m-%d"), + "last_day":date(today.year, today.month, calendar.monthrange(today.year, today.month)[1]).strftime("%Y-%m-%d"), } return render(request, "leave/dashboard.html", context) @@ -2214,12 +2230,13 @@ def available_leave_chart(request): GET : return Json response of labels, dataset, message. """ user = Employee.objects.get(employee_user_id=request.user) - available_leaves = AvailableLeave.objects.filter(employee_id=user) + available_leaves = AvailableLeave.objects.filter(employee_id=user).exclude(available_days=0) leave_count = [] + labels = [] for leave in available_leaves: leave_count.append(leave.available_days + leave.carryforward_days) - labels = [available.leave_type_id.name for available in available_leaves] + labels.append(leave.leave_type_id.name) dataset = [ { "label": _("Total leaves available"), @@ -2245,15 +2262,23 @@ def employee_leave_chart(request): Returns: GET : return Json response of labels, dataset, message. """ - leave_requests = LeaveRequest.objects.filter( - employee_id__is_active=True, status="approved" - ) - leave_types = LeaveType.objects.all() + day = date.today() if request.GET.get("date"): day = request.GET.get("date") day = datetime.strptime(day, "%Y-%m") + leave_requests = LeaveRequest.objects.filter( + employee_id__is_active=True, status="approved" + ) + leave_requests=leave_requests.filter( + start_date__month=day.month, start_date__year=day.year + ) + # leave_types = LeaveType.objects.filter(leaverequest__in=leave_requests.filter( + # start_date__month=day.month, start_date__year=day.year + # )).distinct() + leave_types = leave_requests.values_list('leave_type_id__name', flat=True).distinct() + labels = [] dataset = [] for employee in leave_requests.filter( @@ -2264,7 +2289,7 @@ def employee_leave_chart(request): for leave_type in leave_types: dataset.append( { - "label": leave_type.name, + "label": leave_type, "data": [], } ) @@ -2316,7 +2341,7 @@ def department_leave_chart(request): department_counts = {dep.department: 0 for dep in departments} leave_request = LeaveRequest.objects.filter(status="approved") leave_dates = [] - + labels=[] for leave in leave_request: for leave_date in leave.requested_dates(): leave_dates.append(leave_date.strftime("%Y-%m-%d")) @@ -2325,12 +2350,16 @@ def department_leave_chart(request): for dep in departments: if dep == leave.employee_id.employee_work_info.department_id: department_counts[dep.department] += 1 - - labels = [department.department for department in departments] + + for department, count in department_counts.items(): + if count != 0: + labels.append(department) + values = list(department_counts.values()) + values = [value for value in values if value != 0] dataset = [ { "label": _(""), - "data": list(department_counts.values()), + "data": values, }, ] response = { @@ -2359,13 +2388,19 @@ def leave_type_chart(request): if lev == leave.leave_type_id: leave_type_count[lev.name] += leave.requested_days - labels = [leave_type.name for leave_type in leave_types] - + # labels = [leave_type.name for leave_type in leave_types] + labels = [] + for leave_type, count in leave_type_count.items(): + if count != 0: + labels.append(leave_type) + values = list(leave_type_count.values()) + values = [value for value in values if value != 0] + response = { "labels": labels, "dataset": [ { - "data": list(leave_type_count.values()), + "data": values, }, ], }