53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
from django.http import HttpResponseRedirect
|
|
from django.shortcuts import render
|
|
from pyexpat.errors import messages
|
|
|
|
from base.methods import check_manager
|
|
from helpdesk.models import Ticket
|
|
|
|
decorator_with_arguments = (
|
|
lambda decorator: lambda *args, **kwargs: lambda func: decorator(
|
|
func, *args, **kwargs
|
|
)
|
|
)
|
|
|
|
|
|
@decorator_with_arguments
|
|
def ticket_owner_can_enter(function, perm: str, model: object, manager_access=False):
|
|
from employee.models import Employee, EmployeeWorkInformation
|
|
|
|
"""
|
|
Only the users with permission, or the owner, or employees manager can enter,
|
|
If manager_access:True then all the managers can enter
|
|
"""
|
|
|
|
def _function(request, *args, **kwargs):
|
|
instance_id = kwargs[list(kwargs.keys())[0]]
|
|
if model == Employee:
|
|
employee = Employee.objects.get(id=instance_id)
|
|
else:
|
|
try:
|
|
employee = model.objects.get(id=instance_id).employee_id
|
|
except:
|
|
messages.error(request, ("Sorry, something went wrong!"))
|
|
return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/"))
|
|
can_enter = (
|
|
request.user.employee_get == employee
|
|
or request.user.has_perm(perm)
|
|
or check_manager(request.user.employee_get, employee)
|
|
or (
|
|
EmployeeWorkInformation.objects.filter(
|
|
reporting_manager_id__employee_user_id=request.user
|
|
).exists()
|
|
if manager_access
|
|
else False
|
|
)
|
|
or Ticket.objects.filter(assigned_to__in=[request.user.employee_get])
|
|
or Ticket.objects.filter(created_by=request.user)
|
|
)
|
|
if can_enter:
|
|
return function(request, *args, **kwargs)
|
|
return render(request, "no_perm.html")
|
|
|
|
return _function
|