Files
ihrm/leave/cbv/dashboard.py

176 lines
5.5 KiB
Python

from datetime import date
from typing import Any
from django.urls import reverse
from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _
from base.decorators import manager_can_enter
from base.methods import filtersubordinates
from horilla_views.cbv_methods import login_required
from horilla_views.generic.cbv.views import HorillaListView
from leave.cbv.leave_allocation_request import LeaveAllocationRequests
from leave.cbv.leave_requests import LeaveRequestsListView
from leave.cbv.my_leave_request import MyLeaveRequestListView
from leave.filters import UserLeaveRequestFilter
from leave.models import LeaveRequest
@method_decorator(login_required, name="dispatch")
class LeaveAllocationRequestToApprove(LeaveAllocationRequests):
"""
List view of the page leave allocation to approve in dashboard
"""
columns = [
(_("Employee"), "employee_id", "employee_id__get_avatar"),
(_("Leave Type"), "leave_type_id"),
(_("Requested Days"), "requested_days"),
]
bulk_select_option = False
row_status_indications = None
option_method = None
show_toggle_form = False
records_per_page = 5
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("leave-allocation-approve")
def get_queryset(self):
queryset = super().get_queryset()
queryset = queryset.filter(status="requested", employee_id__is_active=True)
return queryset
@method_decorator(login_required, name="dispatch")
class LeaveRequestsToApprove(LeaveRequestsListView):
"""
List view of the page leave requests to approve in dashboard
"""
columns = [
(_("Employee"), "employee_id", "employee_id__get_avatar"),
(_("Period"), "get_period"),
]
header_attrs = {
"action": 'style ="width:100px !important"',
"employee_id": 'style ="width:100px !important"',
"get_period": 'style ="width:100px !important"',
}
bulk_select_option = False
row_status_indications = None
option_method = None
show_toggle_form = False
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("leave-request-and-approve")
def get_queryset(self):
queryset = super().get_queryset()
queryset = queryset.filter(
status="requested",
employee_id__is_active=True,
start_date__gte=date.today(),
)
queryset = filtersubordinates(
self.request, queryset, "leave.change_leaverequest"
)
return queryset
@method_decorator(login_required, name="dispatch")
@method_decorator(manager_can_enter("leave.view_leaverequest"), name="dispatch")
class DashboardOnLeave(HorillaListView):
"""
list view for on leave in dashboard
"""
columns = [
(_("Employee"), "employee_id", "employee_id__get_avatar"),
]
model = LeaveRequest
filter_class = UserLeaveRequestFilter
show_toggle_form = False
bulk_select_option = False
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("dashboard-on-leave")
if self.request.user.has_perm("leave.view_leaverequest"):
self.row_attrs = """
hx-get='{leave_requests_detail_view}?instance_ids={ordered_ids}'
hx-target="#genericModalBody"
data-target="#genericModal"
data-toggle="oh-modal-toggle"
"""
def get_queryset(self):
today = date.today()
queryset = super().get_queryset()
queryset = queryset.filter(
employee_id__is_active=True,
status="approved",
start_date__lte=today,
end_date__gte=today,
)
return queryset
@method_decorator(login_required, name="dispatch")
class DashboardTotalLeaveRequest(MyLeaveRequestListView):
"""
list view for total leave request in dashboard
"""
columns = [
("Employee", "employee_id", "employee_id__get_avatar"),
("Leave Type", "leave_type_id"),
("Start Date", "start_date"),
("End Date", "end_date"),
("Requested Days", "requested_days"),
("Status", "status"),
]
sortby_mapping = [
(_("Employee"), "employee_id__get_full_name", "employee_id__get_avatar"),
(_("Leave Type"), "leave_type_id__name", "leave_type_id__get_avatar"),
(_("Start Date"), "start_date"),
(_("End Date"), "end_date"),
(_("Requested Days"), "requested_days"),
(_("Status"), "status"),
]
header_attrs = {
"start_date": 'style ="width:100px !important"',
"employee_id": 'style ="width:100px !important"',
"leave_type_id": 'style ="width:100px !important"',
"end_date": 'style ="width:100px !important"',
"status": 'style ="width:100px !important"',
"requested_days": 'style ="width:100px !important"',
}
option_method = None
action_method = None
bulk_select_option = False
row_status_class = None
row_status_indications = None
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("dashboard-total-leave-request")
def get_queryset(self):
"""
to filter data
"""
queryset = super().get_queryset()
employee = self.request.user.employee_get
queryset = queryset.filter(employee_id=employee, status="approved")
return queryset