Files
ihrm/base/request_and_approve.py
Horilla 7b0558f003 Abstract Model Changes (#131)
* [UPDT] BASE: Updated disciplinary action type model by adding abstract class

* [UPDT] BASE: Updated abstract model class save method by fethcing request from thread local

* [UPDT] LEAVE: Updated models in leave module by adding abstract class

* [UPDT] LEAVE: Updated leave request model by adding abstract class

* [UPDT] DASHBOARD: Floating quick action button rather than static template inside dashboard

* [UPDT] Test database

* [UPDT] ASSET: Updated models in asset app by adding abstract class HorillaModels

* [UPDT] ASSET: Updated asset category form by adding exclude fields in class Meta

* [FIX] ATTENDANCE: Attendance overtime permission wrong permission

* [UPDT] Test Database
2024-03-25 10:08:53 +00:00

209 lines
6.6 KiB
Python

"""
views.py
This module is used to map url patterns with request and approve methods in Dashboard.
"""
from datetime import date
import json
from django.shortcuts import render
from asset.models import AssetRequest
from attendance.models import Attendance, AttendanceValidationCondition
from attendance.views.views import strtime_seconds
from base.methods import filtersubordinates
from base.models import ShiftRequest, WorkTypeRequest
from horilla.decorators import login_required
from leave.models import LeaveAllocationRequest, LeaveRequest
from pms.models import Feedback
from django.db.models import Q
from django.core.paginator import Paginator
def paginator_qry(qryset, page_number):
"""
This method is used to paginate query set
"""
paginator = Paginator(qryset, 10)
qryset = paginator.get_page(page_number)
return qryset
@login_required
def dashboard_shift_request(request):
requests = ShiftRequest.objects.filter(
approved=False, canceled=False, employee_id__is_active=True
)
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,
},
)
@login_required
def dashboard_work_type_request(request):
requests = WorkTypeRequest.objects.filter(
approved=False, canceled=False, employee_id__is_active=True
)
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,
},
)
@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:
min_ot = strtime_seconds(condition.minimum_overtime_to_approve)
ot_attendances = Attendance.objects.filter(
overtime_second__gte=min_ot,
attendance_validated=True,
employee_id__is_active=True,
attendance_overtime_approve=False,
)
ot_attendances = filtersubordinates(
request, ot_attendances, "attendance.change_attendance"
)
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,
},
)
@login_required
def dashboard_attendance_validate(request):
previous_data = request.GET.urlencode()
page_number = request.GET.get("page")
validate_attendances = Attendance.objects.filter(
attendance_validated=False, employee_id__is_active=True
)
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]
)
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", employee_id__is_active=True
)
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])
return render(
request,
"request_and_approve/leave_request_approve.html",
{
"leave_requests": leave_requests,
"requests_ids": leave_requests_ids,
"pd": previous_data,
# "current_date":date.today(),
},
)
@login_required
def leave_allocation_approve(request):
previous_data = request.GET.urlencode()
page_number = request.GET.get("page")
allocation_reqests = LeaveAllocationRequest.objects.filter(
status="requested", employee_id__is_active=True
)
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]
)
return render(
request,
"request_and_approve/leave_allocation_approve.html",
{
"allocation_reqests": allocation_reqests,
"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)
).distinct()
feedbacks = feedback_requested.exclude(feedback_answer__employee_id=employee)
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", requested_employee_id__is_active=True
)
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,
},
)