[UPDT] DASHBOARD: Pagination indication in table
This commit is contained in:
@@ -21,34 +21,38 @@ from django.db.models import Q
|
||||
|
||||
@login_required
|
||||
def dashboard_shift_request(request):
|
||||
requests = ShiftRequest.objects.filter(approved= False,canceled = False)
|
||||
requests = filtersubordinates(
|
||||
request, requests, "base.add_shiftrequest"
|
||||
requests = ShiftRequest.objects.filter(approved=False, canceled=False)
|
||||
requests = filtersubordinates(request, requests, "base.add_shiftrequest")
|
||||
requests_ids = json.dumps([instance.id for instance in requests])
|
||||
return render(
|
||||
request,
|
||||
"request_and_approve/shift_request.html",
|
||||
{
|
||||
"requests": requests,
|
||||
"requests_ids": requests_ids,
|
||||
},
|
||||
)
|
||||
requests_ids = json.dumps(
|
||||
[
|
||||
instance.id for instance in requests
|
||||
]
|
||||
)
|
||||
return render(request, "request_and_approve/shift_request.html",{"requests": requests,"requests_ids": requests_ids,})
|
||||
|
||||
|
||||
@login_required
|
||||
def dashboard_work_type_request(request):
|
||||
requests = WorkTypeRequest.objects.filter(approved= False,canceled = False)
|
||||
requests = filtersubordinates(
|
||||
request, requests, "base.add_worktyperequest"
|
||||
requests = WorkTypeRequest.objects.filter(approved=False, canceled=False)
|
||||
requests = filtersubordinates(request, requests, "base.add_worktyperequest")
|
||||
requests_ids = json.dumps([instance.id for instance in requests])
|
||||
return render(
|
||||
request,
|
||||
"request_and_approve/work_type_request.html",
|
||||
{
|
||||
"requests": requests,
|
||||
"requests_ids": requests_ids,
|
||||
},
|
||||
)
|
||||
requests_ids = json.dumps(
|
||||
[
|
||||
instance.id for instance in requests
|
||||
]
|
||||
)
|
||||
return render(request, "request_and_approve/work_type_request.html",{"requests": requests,"requests_ids": requests_ids,})
|
||||
|
||||
|
||||
@login_required
|
||||
def dashboard_overtime_approve(request):
|
||||
previous_data = request.GET.urlencode()
|
||||
page_number = request.GET.get("page")
|
||||
condition = AttendanceValidationCondition.objects.first()
|
||||
min_ot = strtime_seconds("00:00")
|
||||
if condition is not None and condition.minimum_overtime_to_approve is not None:
|
||||
@@ -57,17 +61,22 @@ def dashboard_overtime_approve(request):
|
||||
overtime_second__gte=min_ot,
|
||||
attendance_validated=True,
|
||||
employee_id__is_active=True,
|
||||
attendance_overtime_approve =False,
|
||||
attendance_overtime_approve=False,
|
||||
)
|
||||
ot_attendances = filtersubordinates(
|
||||
ot_attendances = filtersubordinates(
|
||||
request, ot_attendances, "attendance.change_attendance"
|
||||
)
|
||||
ot_attendances_ids = json.dumps(
|
||||
[
|
||||
instance.id for instance in ot_attendances
|
||||
]
|
||||
ot_attendances = paginator_qry(ot_attendances, page_number)
|
||||
ot_attendances_ids = json.dumps([instance.id for instance in ot_attendances])
|
||||
return render(
|
||||
request,
|
||||
"request_and_approve/overtime_approve.html",
|
||||
{
|
||||
"overtime_attendances": ot_attendances,
|
||||
"ot_attendances_ids": ot_attendances_ids,
|
||||
"pd": previous_data,
|
||||
},
|
||||
)
|
||||
return render(request, "request_and_approve/overtime_approve.html",{"overtime_attendances": ot_attendances,"ot_attendances_ids": ot_attendances_ids,})
|
||||
|
||||
|
||||
@login_required
|
||||
@@ -77,41 +86,43 @@ def dashboard_attendance_validate(request):
|
||||
validate_attendances = Attendance.objects.filter(
|
||||
attendance_validated=False, employee_id__is_active=True
|
||||
)
|
||||
validate_attendances = filtersubordinates(
|
||||
validate_attendances = filtersubordinates(
|
||||
request, validate_attendances, "attendance.change_attendance"
|
||||
)
|
||||
validate_attendances = paginator_qry(validate_attendances, page_number)
|
||||
validate_attendances_ids = json.dumps(
|
||||
[
|
||||
instance.id for instance in validate_attendances
|
||||
]
|
||||
[instance.id for instance in validate_attendances]
|
||||
)
|
||||
return render(
|
||||
request,
|
||||
"request_and_approve/attendance_validate.html",
|
||||
{
|
||||
"validate_attendances": validate_attendances,
|
||||
"validate_attendances_ids": validate_attendances_ids,
|
||||
"pd": previous_data,
|
||||
},
|
||||
)
|
||||
return render(request, "request_and_approve/attendance_validate.html",{"validate_attendances": validate_attendances,"validate_attendances_ids": validate_attendances_ids, "pd": previous_data,})
|
||||
|
||||
|
||||
@login_required
|
||||
def leave_request_and_approve(request):
|
||||
previous_data = request.GET.urlencode()
|
||||
page_number = request.GET.get("page")
|
||||
leave_requests = LeaveRequest.objects.filter(status = "requested")
|
||||
leave_requests = filtersubordinates(
|
||||
leave_requests = LeaveRequest.objects.filter(status="requested")
|
||||
leave_requests = filtersubordinates(
|
||||
request, leave_requests, "leave.change_leaverequest"
|
||||
)
|
||||
leave_requests = paginator_qry(leave_requests, page_number)
|
||||
leave_requests_ids = json.dumps(
|
||||
[
|
||||
instance.id for instance in leave_requests
|
||||
]
|
||||
)
|
||||
leave_requests_ids = json.dumps([instance.id for instance in leave_requests])
|
||||
return render(
|
||||
request,
|
||||
"request_and_approve/leave_request_approve.html",
|
||||
{
|
||||
"leave_requests": leave_requests,
|
||||
"requests_ids": leave_requests_ids,
|
||||
"requests_ids": leave_requests_ids,
|
||||
"pd": previous_data,
|
||||
# "current_date":date.today(),
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@@ -119,46 +130,60 @@ def leave_request_and_approve(request):
|
||||
def leave_allocation_approve(request):
|
||||
previous_data = request.GET.urlencode()
|
||||
page_number = request.GET.get("page")
|
||||
allocation_reqests = LeaveAllocationRequest.objects.filter(status = "requested")
|
||||
allocation_reqests = filtersubordinates(
|
||||
allocation_reqests = LeaveAllocationRequest.objects.filter(status="requested")
|
||||
allocation_reqests = filtersubordinates(
|
||||
request, allocation_reqests, "leave.view_leaveallocationrequest"
|
||||
)
|
||||
# allocation_reqests = paginator_qry(allocation_reqests, page_number)
|
||||
allocation_reqests_ids = json.dumps(
|
||||
[
|
||||
instance.id for instance in allocation_reqests
|
||||
]
|
||||
[instance.id for instance in allocation_reqests]
|
||||
)
|
||||
return render(
|
||||
request,
|
||||
"request_and_approve/leave_allocation_approve.html",
|
||||
{
|
||||
"allocation_reqests": allocation_reqests,
|
||||
"reqests_ids": allocation_reqests_ids,
|
||||
"reqests_ids": allocation_reqests_ids,
|
||||
"pd": previous_data,
|
||||
# "current_date":date.today(),
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def dashboard_feedback_answer(request):
|
||||
employee = request.user.employee_get
|
||||
feedback_requested = Feedback.objects.filter(
|
||||
Q(manager_id=employee,manager_id__is_active=True)
|
||||
| Q(colleague_id=employee,colleague_id__is_active=True)
|
||||
| Q(subordinate_id=employee,subordinate_id__is_active=True)
|
||||
Q(manager_id=employee, manager_id__is_active=True)
|
||||
| Q(colleague_id=employee, colleague_id__is_active=True)
|
||||
| Q(subordinate_id=employee, subordinate_id__is_active=True)
|
||||
).distinct()
|
||||
feedbacks = feedback_requested.exclude(feedback_answer__employee_id = employee)
|
||||
feedbacks = feedback_requested.exclude(feedback_answer__employee_id=employee)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"request_and_approve/feedback_answer.html",
|
||||
{"feedbacks": feedbacks, "current_date": date.today()},
|
||||
)
|
||||
|
||||
return render(request, "request_and_approve/feedback_answer.html",{'feedbacks': feedbacks,'current_date':date.today()})
|
||||
|
||||
@login_required
|
||||
def dashboard_asset_request_approve(request):
|
||||
asset_requests = AssetRequest.objects.filter(asset_request_status='Requested')
|
||||
asset_requests = AssetRequest.objects.filter(asset_request_status="Requested")
|
||||
|
||||
asset_requests = filtersubordinates(
|
||||
request, asset_requests, "asset.change_assetrequest", field="requested_employee_id"
|
||||
asset_requests = filtersubordinates(
|
||||
request,
|
||||
asset_requests,
|
||||
"asset.change_assetrequest",
|
||||
field="requested_employee_id",
|
||||
)
|
||||
requests_ids = json.dumps([instance.id for instance in asset_requests])
|
||||
|
||||
return render(request, "request_and_approve/asset_requests_approve.html",{'asset_requests': asset_requests,'requests_ids': requests_ids,})
|
||||
return render(
|
||||
request,
|
||||
"request_and_approve/asset_requests_approve.html",
|
||||
{
|
||||
"asset_requests": asset_requests,
|
||||
"requests_ids": requests_ids,
|
||||
},
|
||||
)
|
||||
|
||||
@@ -1,90 +1,129 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div
|
||||
class="oh-card-dashboard__header oh-card-dashboard__header--divider"
|
||||
>
|
||||
{% if validate_attendances.has_previous %}
|
||||
<span class="oh-card-dashboard__title" id="department-previous" style="cursor: pointer;" hx-target="#AttendanceValidateTarget"
|
||||
hx-get="{% url 'dashboard-attendance-validate' %}?{{pd}}&page={{ validate_attendances.previous_page_number }}">
|
||||
<ion-icon name="caret-back-outline" role="img" class="md hydrated" aria-label="caret back outline"></ion-icon>
|
||||
<div class="oh-card-dashboard__header oh-card-dashboard__header--divider">
|
||||
{% if validate_attendances.has_previous %}
|
||||
<span
|
||||
class="oh-card-dashboard__title"
|
||||
id="department-previous"
|
||||
style="cursor: pointer"
|
||||
hx-target="#AttendanceValidateTarget"
|
||||
hx-get="{% url 'dashboard-attendance-validate' %}?{{pd}}&page={{ validate_attendances.previous_page_number }}"
|
||||
hx-trigger="click delay:0.3s"
|
||||
title="Previous Page"
|
||||
>
|
||||
<ion-icon
|
||||
name="caret-back-outline"
|
||||
role="img"
|
||||
class="md hydrated"
|
||||
aria-label="caret back outline"
|
||||
></ion-icon>
|
||||
</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<span class="oh-card-dashboard__title">{% trans 'Attendance To Validate' %} </span>
|
||||
|
||||
{% if validate_attendances.has_next %}
|
||||
<span class="oh-card-dashboard__title float-end" id="department-previous" style="cursor: pointer;" hx-target="#AttendanceValidateTarget"
|
||||
hx-get="{% url 'dashboard-attendance-validate' %}?{{pd}}&page={{ validate_attendances.next_page_number }}">
|
||||
<ion-icon name="caret-forward-outline" role="img" class="md hydrated" aria-label="caret back outline"></ion-icon>
|
||||
<span class="oh-card-dashboard__title"
|
||||
>{% trans 'Attendance To Validate' %}
|
||||
</span>
|
||||
{% endif %}
|
||||
|
||||
{% if validate_attendances.has_next %}
|
||||
<span
|
||||
class="oh-card-dashboard__title float-end"
|
||||
id="department-previous"
|
||||
style="cursor: pointer"
|
||||
hx-target="#AttendanceValidateTarget"
|
||||
hx-get="{% url 'dashboard-attendance-validate' %}?{{pd}}&page={{ validate_attendances.next_page_number }}"
|
||||
hx-trigger="click delay:0.3s"
|
||||
title="Next Page"
|
||||
>
|
||||
<ion-icon
|
||||
name="caret-forward-outline"
|
||||
role="img"
|
||||
class="md hydrated"
|
||||
aria-label="caret back outline"
|
||||
></ion-icon>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="oh-card-dashboard__body" style="height:80%">
|
||||
{% if validate_attendances %}
|
||||
<div class="oh-sticky-table h-100">
|
||||
<div class="oh-sticky-table__table oh-table--sortable">
|
||||
<div class="oh-sticky-table__thead">
|
||||
<div class="oh-sticky-table__tr">
|
||||
<div
|
||||
class="oh-sticky-table__th"
|
||||
>
|
||||
{% trans "Employee" %}
|
||||
<div class="oh-card-dashboard__body" style="height: 80%">
|
||||
{% if validate_attendances %}
|
||||
<div class="oh-sticky-table h-100">
|
||||
<div class="oh-sticky-table__table oh-table--sortable">
|
||||
<div class="oh-sticky-table__thead">
|
||||
<div class="oh-sticky-table__tr">
|
||||
<div class="oh-sticky-table__th">
|
||||
{% trans "Employee" %}
|
||||
</div>
|
||||
<div class="oh-sticky-table__th">
|
||||
{% trans "Worked Hours" %}
|
||||
</div>
|
||||
<div class="oh-sticky-table__th"></div>
|
||||
</div>
|
||||
<div
|
||||
class="oh-sticky-table__th"
|
||||
>
|
||||
{% trans "Worked Hours" %}
|
||||
</div>
|
||||
<div class="oh-sticky-table__th"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% for attendance in validate_attendances %}
|
||||
{% for attendance in validate_attendances %}
|
||||
<div class="oh-sticky-table__tbody">
|
||||
<div
|
||||
class="oh-sticky-table__tr"
|
||||
draggable="false"
|
||||
data-toggle="oh-modal-toggle"
|
||||
data-target="#bigModal"
|
||||
hx-target="#bigModalTarget"
|
||||
hx-get="{% url 'user-request-one-view' attendance.id %}?validate=true&instances_ids={{validate_attendances_ids}}&dashboard=true"
|
||||
>
|
||||
class="oh-sticky-table__tr"
|
||||
draggable="false"
|
||||
data-toggle="oh-modal-toggle"
|
||||
data-target="#bigModal"
|
||||
hx-target="#bigModalTarget"
|
||||
hx-get="{% url 'user-request-one-view' attendance.id %}?validate=true&instances_ids={{validate_attendances_ids}}&dashboard=true"
|
||||
>
|
||||
<div class="oh-sticky-table__sd">
|
||||
<div class="oh-profile oh-profile--md">
|
||||
<div class="oh-profile__avatar mr-1">
|
||||
<img
|
||||
src="{{attendance.employee_id.get_avatar}}"
|
||||
class="oh-profile__image"
|
||||
alt=""
|
||||
/>
|
||||
<img
|
||||
src="{{attendance.employee_id.get_avatar}}"
|
||||
class="oh-profile__image"
|
||||
alt=""
|
||||
/>
|
||||
</div>
|
||||
<span class="oh-profile__name oh-text--dark"
|
||||
>{{attendance.employee_id}}</span
|
||||
>{{attendance.employee_id}}</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oh-sticky-table__td">
|
||||
{{attendance.attendance_worked_hour}}
|
||||
{{attendance.attendance_worked_hour}}
|
||||
</div>
|
||||
<div class="oh-sticky-table__td">
|
||||
<a
|
||||
href='{% url "validate-this-attendance" attendance.id %}'
|
||||
class="oh-btn oh-btn--info"
|
||||
onclick="event.stopPropagation();return confirm('{% trans "Do you want to validate this attendance ?" %}')"
|
||||
href='{% url "validate-this-attendance" attendance.id %}'
|
||||
class="oh-btn oh-btn--info"
|
||||
onclick="event.stopPropagation();return confirm('{% trans "Do you want to validate this attendance ?" %}')"
|
||||
>
|
||||
{% trans "Validate" %}
|
||||
{% trans "Validate" %}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div style="height: 380px; display:flex;align-items: center;justify-content: center;" class="">
|
||||
<div style="" class="">
|
||||
<img style="display: block;width: 70px;margin: 20px auto ;" src="/static/images/ui/joiningchart.png" class="" alt=""/>
|
||||
<h3 style="font-size:16px" class="oh-404__subtitle">{% trans "No data Found..." %}</h3>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<span class="oh-pagination__page float-end mt-2 fw-bold">
|
||||
{% trans "Page" %} {{ validate_attendances.number }} {%trans "of" %}
|
||||
{{validate_attendances.paginator.num_pages }}.
|
||||
</span>
|
||||
{% else %}
|
||||
<div
|
||||
style="
|
||||
height: 380px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
"
|
||||
class=""
|
||||
>
|
||||
<div style="" class="">
|
||||
<img
|
||||
style="display: block; width: 70px; margin: 20px auto"
|
||||
src="/static/images/ui/joiningchart.png"
|
||||
class=""
|
||||
alt=""
|
||||
/>
|
||||
<h3 style="font-size: 16px" class="oh-404__subtitle">
|
||||
{% trans "No data Found..." %}
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user