diff --git a/pms/methods.py b/pms/methods.py new file mode 100644 index 000000000..68474d692 --- /dev/null +++ b/pms/methods.py @@ -0,0 +1,70 @@ +from pyexpat.errors import messages + +from django.http import HttpResponse +from employee.models import EmployeeWorkInformation +from pms.models import EmployeeObjective, Objective +from django.contrib import messages +from django.shortcuts import render + +decorator_with_arguments = ( + lambda decorator: lambda *args, **kwargs: lambda func: decorator( + func, *args, **kwargs + ) +) + + +@decorator_with_arguments +def pms_manager_can_enter(function, perm): + """ + This method is used to check permission to employee for enter to the function if the employee + do not have permission also checks, has reporting manager or manager of respective objective. + """ + + def _function(request, *args, **kwargs): + user = request.user + employee = user.employee_get + is_manager = EmployeeWorkInformation.objects.filter( + reporting_manager_id=employee + ).exists() + is_objective_manager = Objective.objects.filter(managers=employee).exists() + if user.has_perm(perm) or is_manager or is_objective_manager: + return function(request, *args, **kwargs) + else: + messages.info(request, "You dont have permission.") + previous_url = request.META.get("HTTP_REFERER", "/") + script = f'' + key = "HTTP_HX_REQUEST" + if key in request.META.keys(): + return render(request, "decorator_404.html") + return HttpResponse(script) + + return _function + + +@decorator_with_arguments +def pms_owner_and_manager_can_enter(function, perm): + """ + This method is used to check permission to employee for enter to the function if the employee + do not have permission also checks, has reporting manager or manager of respective objective. + """ + + def _function(request, *args, **kwargs): + user = request.user + employee = user.employee_get + is_manager = EmployeeWorkInformation.objects.filter( + reporting_manager_id=employee + ).exists() + is_objective_owner = EmployeeObjective.objects.filter(employee_id=employee).exists() + is_objective_manager = Objective.objects.filter(managers=employee).exists() + if user.has_perm(perm) or is_manager or is_objective_manager or is_objective_owner: + return function(request, *args, **kwargs) + else: + messages.info(request, "You dont have permission.") + previous_url = request.META.get("HTTP_REFERER", "/") + script = f'' + key = "HTTP_HX_REQUEST" + if key in request.META.keys(): + return render(request, "decorator_404.html") + return HttpResponse(script) + + return _function \ No newline at end of file diff --git a/pms/templates/okr/emp_obj_single.html b/pms/templates/okr/emp_obj_single.html index 7dd1c197a..ebb10b71b 100644 --- a/pms/templates/okr/emp_obj_single.html +++ b/pms/templates/okr/emp_obj_single.html @@ -63,14 +63,20 @@