-
Notifications
You must be signed in to change notification settings - Fork 244
/
Copy pathdecorators.py
134 lines (118 loc) · 5.1 KB
/
decorators.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
"""
decorator functions for leave
"""
from django.contrib import messages
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import redirect, render
from django.utils.translation import gettext_lazy as _
from leave.models import LeaveGeneralSetting
from .models import LeaveAllocationRequest
decorator_with_arguments = (
lambda decorator: lambda *args, **kwargs: lambda func: decorator(
func, *args, **kwargs
)
)
@decorator_with_arguments
def leave_allocation_change_permission(function=None, *args, **kwargs):
def check_permission(
request,
req_id=None,
*args,
**kwargs,
):
"""
This method is used to check the employee can change a leave allocation request or not
"""
leave_allocation_request = LeaveAllocationRequest.objects.get(id=req_id)
if (
request.user.has_perm("leave.change_leaveallocationrequest")
or request.user.employee_get
== leave_allocation_request.employee_id.employee_work_info.reporting_manager_id
or request.user.employee_get == leave_allocation_request.employee_id
):
return function(request, *args, req_id=req_id, **kwargs)
messages.info(request, _("You dont have permission."))
previous_url = request.META.get("HTTP_REFERER", "/")
script = f'<script>window.location.href = "{previous_url}"</script>'
key = "HTTP_HX_REQUEST"
if key in request.META.keys():
return render(request, "decorator_404.html")
return HttpResponse(script)
return check_permission
@decorator_with_arguments
def leave_allocation_delete_permission(function=None, *args, **kwargs):
def check_permission(
request,
req_id=None,
*args,
**kwargs,
):
"""
This method is used to check the employee can delete a leave allocation request or not
"""
try:
leave_allocation_request = LeaveAllocationRequest.objects.get(id=req_id)
if (
request.user.has_perm("leave.delete_leaveallocationrequest")
or request.user.employee_get
== leave_allocation_request.employee_id.employee_work_info.reporting_manager_id
or request.user.employee_get == leave_allocation_request.employee_id
):
return function(request, *args, req_id=req_id, **kwargs)
messages.info(request, _("You dont have permission."))
previous_url = request.META.get("HTTP_REFERER", "/")
script = f'<script>window.location.href = "{previous_url}"</script>'
key = "HTTP_HX_REQUEST"
if key in request.META.keys():
return render(request, "decorator_404.html")
return HttpResponse(script)
except (LeaveAllocationRequest.DoesNotExist, OverflowError, ValueError):
messages.error(request, _("Leave allocation request not found"))
return redirect("/leave/leave-allocation-request-view/")
return check_permission
@decorator_with_arguments
def leave_allocation_reject_permission(function=None, *args, **kwargs):
def check_permission(
request,
req_id=None,
*args,
**kwargs,
):
"""
This method is used to check the employee can reject a leave allocation request or not
"""
try:
leave_allocation_request = LeaveAllocationRequest.objects.get(id=req_id)
if (
request.user.has_perm("leave.delete_leaveallocationrequest")
or request.user.employee_get
== leave_allocation_request.employee_id.employee_work_info.reporting_manager_id
):
return function(request, *args, req_id=req_id, **kwargs)
messages.info(request, _("You dont have permission."))
previous_url = request.META.get("HTTP_REFERER", "/")
script = f'<script>window.location.href = "{previous_url}"</script>'
key = "HTTP_HX_REQUEST"
if key in request.META.keys():
return render(request, "decorator_404.html")
return HttpResponse(script)
except (LeaveAllocationRequest.DoesNotExist, OverflowError, ValueError):
messages.error(request, _("Leave allocation request not found"))
return redirect("/leave/leave-allocation-request-view/")
return check_permission
@decorator_with_arguments
def is_compensatory_leave_enabled(func=None, *args, **kwargs):
def function(request, *args, **kwargs):
"""
This function check whether the compensatory leave feature is enabled
"""
if (
LeaveGeneralSetting.objects.exists()
and LeaveGeneralSetting.objects.all().first().compensatory_leave
):
return func(request, *args, **kwargs)
messages.info(request, _("Sorry,Compensatory leave is not enabled."))
previous_url = request.META.get("HTTP_REFERER", "/")
script = f'<script>window.location.href = "{previous_url}"</script>'
return HttpResponse(script)
return function