diff --git a/leave/templates/leave/leave_request/request_view.html b/leave/templates/leave/leave_request/request_view.html index 960a5f121..477de98a5 100644 --- a/leave/templates/leave/leave_request/request_view.html +++ b/leave/templates/leave/leave_request/request_view.html @@ -219,21 +219,22 @@ {% endif %} - -
-
- -
+ {% if perms.leave.add_leaverequest or request.user|is_reportingmanager %} +
+
+ +
+ {% endif %}
diff --git a/leave/views.py b/leave/views.py index ec74d6ac0..e00c2da94 100644 --- a/leave/views.py +++ b/leave/views.py @@ -493,10 +493,24 @@ def leave_request_view(request): """ queryset = LeaveRequestFilter(request.GET).qs.order_by("-id").distinct() multiple_approvals = filter_conditional_leave_request(request).distinct() - queryset = ( - filtersubordinates(request, queryset, "leave.view_leaverequest") - | multiple_approvals - ) + normal_requests = filtersubordinates(request, queryset, "leave.view_leaverequest") + + if not request.user.is_superuser: + multi_approve_requests = LeaveRequestConditionApproval.objects.filter( + is_approved=False, is_rejected=False + ) + + multi_ids = [request.leave_request_id.id for request in multi_approve_requests] + + # Create a new list excluding leave requests with IDs in multi_ids + normal_requests = [ + leave.id for leave in normal_requests if leave.id not in multi_ids + ] + + # Convert the list of IDs back to a queryset + normal_requests = LeaveRequest.objects.filter(id__in=normal_requests).distinct() + + queryset = normal_requests | multiple_approvals page_number = request.GET.get("page") page_obj = paginator_qry(queryset, page_number) leave_request_filter = LeaveRequestFilter() @@ -606,7 +620,24 @@ def leave_request_filter(request): leave_requests_with_interview.append(leave_request) field = request.GET.get("field") + multiple_approvals = filter_conditional_leave_request(request) + queryset = filtersubordinates(request, queryset, "leave.view_leaverequest") + + if not request.user.is_superuser: + multi_approve_requests = LeaveRequestConditionApproval.objects.filter( + is_approved=False, is_rejected=False + ) + + multi_ids = [request.leave_request_id.id for request in multi_approve_requests] + + # Create a new list excluding leave requests with IDs in multi_ids + queryset = [leave.id for leave in queryset if leave.id not in multi_ids] + + # Convert the list of IDs back to a queryset + queryset = LeaveRequest.objects.filter(id__in=queryset) + + queryset = queryset | multiple_approvals leave_request_filter = LeaveRequestFilter(request.GET, queryset).qs page_number = request.GET.get("page") template = ("leave/leave_request/leave_requests.html",) @@ -4884,6 +4915,19 @@ def leave_request_and_approve(request): leave_requests = filtersubordinates( request, leave_requests, "leave.change_leaverequest" ) + + # Filter the initial query set for multi_approve_requests + multi_approve_requests = LeaveRequestConditionApproval.objects.filter( + is_approved=False, is_rejected=False + ) + if multi_approve_requests: + multi_ids = [request.leave_request_id.id for request in multi_approve_requests] + + # Create a new list excluding leave requests with IDs in multi_ids + leave_requests = [ + leave for leave in leave_requests if leave.id not in multi_ids + ] + leave_requests = paginator_qry(leave_requests, page_number) leave_requests_ids = json.dumps([instance.id for instance in leave_requests]) return render(