[UPDT] LEAVE : Leave clash updation by excluding the cancelled or rejected leaves
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user