[UPDT] LEAVE : Leave clash updation by excluding the cancelled or rejected leaves

This commit is contained in:
Horilla
2024-09-26 15:07:54 +05:30
parent 75f34efdc8
commit ad2afcb916
3 changed files with 65 additions and 27 deletions

View File

@@ -680,10 +680,14 @@ class LeaveRequest(HorillaModel):
else:
self.exclude_leaves()
self.leave_clashes_count = self.count_leave_clashes()
if self.status in ["cancelled", "rejected"]:
self.leave_clashes_count = 0
else:
self.leave_clashes_count = self.count_leave_clashes()
super().save(*args, **kwargs)
self.update_leave_clashes_count()
super().save(*args, **kwargs)
work_info = EmployeeWorkInformation.objects.filter(employee_id=self.employee_id)
department_id = None
conditions = None
@@ -898,7 +902,9 @@ class LeaveRequest(HorillaModel):
"""
Update the leave clashes count for all leave requests.
"""
leave_requests_to_update = LeaveRequest.objects.all().exclude(id=self.id)
leave_requests_to_update = LeaveRequest.objects.exclude(
Q(id=self.id) | Q(status="cancelled") | Q(status="rejected")
)
for leave_request in leave_requests_to_update:
leave_request.leave_clashes_count = leave_request.count_leave_clashes()
@@ -914,17 +920,22 @@ class LeaveRequest(HorillaModel):
with other employees' requested dates.
"""
work_info = EmployeeWorkInformation.objects.filter(employee_id=self.employee_id)
if work_info.exists():
overlapping_requests = LeaveRequest.objects.exclude(id=self.id).filter(
Q(
employee_id__employee_work_info__department_id=self.employee_id.employee_work_info.department_id
if work_info.exists() and self.status not in ["cancelled", "rejected"]:
overlapping_requests = (
LeaveRequest.objects.exclude(id=self.id)
.filter(
Q(
employee_id__employee_work_info__department_id=self.employee_id.employee_work_info.department_id
)
| Q(
employee_id__employee_work_info__job_position_id=self.employee_id.employee_work_info.job_position_id
),
start_date__lte=self.end_date,
end_date__gte=self.start_date,
)
| Q(
employee_id__employee_work_info__job_position_id=self.employee_id.employee_work_info.job_position_id
),
start_date__lte=self.end_date,
end_date__gte=self.start_date,
.exclude(Q(status="cancelled") | Q(status="rejected"))
)
return overlapping_requests.count()
return 0

View File

@@ -97,6 +97,20 @@
{% endfor %}
</div>
</div>
{% elif leave_request.status == 'rejected' or leave_request.status == 'cancelled' %}
<div class="oh-sticky-table__table mt-3">
<div class="oh-404__subtitle">
<img
style="width: 110px; height: 110px"
src="{% static 'images/ui/argument.png' %}"
class="oh-404__image mb-4"
alt="Page not found. 404."
/>
<h5 class="oh-404__subtitle">
{% trans "No clashed requestes available for cancelled or rejected leaves." %}
</h5>
</div>
</div>
{% else %}
<div class="oh-sticky-table__table mt-3">
<div class="oh-404__subtitle">

View File

@@ -1029,6 +1029,8 @@ def leave_request_cancel(request, id, emp_id=None):
leave_request.approved_available_days = 0
leave_request.approved_carryforward_days = 0
leave_request.status = "rejected"
leave_request.leave_clashes_count = 0
if leave_request.multiple_approvals() and not request.user.is_superuser:
conditional_requests = leave_request.multiple_approvals()
approver = [
@@ -4141,24 +4143,34 @@ def view_clashes(request, leave_request_id):
This method is used to filter or view the leave clashes
"""
record = get_object_or_404(LeaveRequest, id=leave_request_id)
overlapping_requests = LeaveRequest.objects.filter(
Q(
if record.status == "rejected" or record.status == "cancelled":
overlapping_requests = LeaveRequest.objects.none()
clashed_due_to_department = LeaveRequest.objects.none()
clashed_due_to_job_position = LeaveRequest.objects.none()
else:
overlapping_requests = (
LeaveRequest.objects.filter(
Q(
employee_id__employee_work_info__department_id=record.employee_id.employee_work_info.department_id
)
| Q(
employee_id__employee_work_info__job_position_id=record.employee_id.employee_work_info.job_position_id
),
start_date__lte=record.end_date,
end_date__gte=record.start_date,
)
.exclude(id=leave_request_id)
.exclude(Q(status="cancelled") | Q(status="rejected"))
)
clashed_due_to_department = overlapping_requests.filter(
employee_id__employee_work_info__department_id=record.employee_id.employee_work_info.department_id
)
| Q(
clashed_due_to_job_position = overlapping_requests.filter(
employee_id__employee_work_info__job_position_id=record.employee_id.employee_work_info.job_position_id
),
start_date__lte=record.end_date,
end_date__gte=record.start_date,
).exclude(id=leave_request_id)
clashed_due_to_department = overlapping_requests.filter(
employee_id__employee_work_info__department_id=record.employee_id.employee_work_info.department_id
)
clashed_due_to_job_position = overlapping_requests.filter(
employee_id__employee_work_info__job_position_id=record.employee_id.employee_work_info.job_position_id
)
)
leave_request_filter = LeaveRequestFilter(request.GET, overlapping_requests).qs
leave_request_filter = paginator_qry(leave_request_filter, request.GET.get("page"))
@@ -4171,6 +4183,7 @@ def view_clashes(request, leave_request_id):
request,
"leave/leave_request/leave_clashes.html",
{
"leave_request": record,
"records": overlapping_requests,
"current_date": date.today(),
"requests_ids": requests_ids,