190 lines
6.1 KiB
Python
190 lines
6.1 KiB
Python
from django.contrib import messages
|
|
from django.http import HttpResponse
|
|
|
|
from project.methods import (
|
|
any_project_manager,
|
|
any_project_member,
|
|
any_task_manager,
|
|
any_task_member,
|
|
)
|
|
|
|
from .models import Project, ProjectStage, Task
|
|
|
|
decorator_with_arguments = (
|
|
lambda decorator: lambda *args, **kwargs: lambda func: decorator(
|
|
func, *args, **kwargs
|
|
)
|
|
)
|
|
|
|
|
|
@decorator_with_arguments
|
|
def is_projectmanager_or_member_or_perms(function, perm):
|
|
def _function(request, *args, **kwargs):
|
|
"""
|
|
This method is used to check the employee is project manager or not
|
|
"""
|
|
user = request.user
|
|
if (
|
|
user.has_perm(perm)
|
|
or any_project_manager(user)
|
|
or any_project_member(user)
|
|
or any_task_manager(user)
|
|
or any_task_member(user)
|
|
):
|
|
return function(request, *args, **kwargs)
|
|
messages.info(request, "You don't have permission.")
|
|
return HttpResponse("<script>window.location.reload()</script>")
|
|
|
|
return _function
|
|
|
|
|
|
@decorator_with_arguments
|
|
def project_update_permission(function=None, *args, **kwargs):
|
|
def check_project_member(
|
|
request,
|
|
project_id=None,
|
|
*args,
|
|
**kwargs,
|
|
):
|
|
"""
|
|
This method is used to check the employee is project member or not
|
|
"""
|
|
project = Project.objects.get(id=project_id)
|
|
employee = request.user.employee_get
|
|
if (
|
|
request.user.has_perm("project.change_project")
|
|
or employee in project.managers.all()
|
|
or employee in project.members.all()
|
|
or any(
|
|
employee in task.task_managers.all() for task in project.task_set.all()
|
|
)
|
|
or any(
|
|
employee in task.task_members.all() for task in project.task_set.all()
|
|
)
|
|
):
|
|
return function(request, *args, project_id=project_id, **kwargs)
|
|
messages.info(request, "You dont have permission.")
|
|
return HttpResponse("<script>window.location.reload()</script>")
|
|
# return function(request, *args, **kwargs)
|
|
|
|
return check_project_member
|
|
|
|
|
|
@decorator_with_arguments
|
|
def project_delete_permission(function=None, *args, **kwargs):
|
|
def is_project_manager(
|
|
request,
|
|
project_id=None,
|
|
*args,
|
|
**kwargs,
|
|
):
|
|
"""
|
|
This method is used to check the employee is project manager or not
|
|
"""
|
|
project = Project.objects.get(id=project_id)
|
|
if (
|
|
request.user.employee_get in project.managers.all()
|
|
or request.user.is_superuser
|
|
):
|
|
return function(request, *args, project_id=project_id, **kwargs)
|
|
messages.info(request, "You dont have permission.")
|
|
return HttpResponse("<script>window.location.reload()</script>")
|
|
|
|
return is_project_manager
|
|
|
|
|
|
@decorator_with_arguments
|
|
def project_stage_update_permission(function=None, *args, **kwargs):
|
|
def check_project_member(
|
|
request,
|
|
stage_id=None,
|
|
*args,
|
|
**kwargs,
|
|
):
|
|
"""
|
|
This method is used to check the employee is project stage member or not
|
|
"""
|
|
project = ProjectStage.objects.get(id=stage_id).project
|
|
if (
|
|
request.user.has_perm("project.change_project")
|
|
or request.user.has_perm("project.change_task")
|
|
or request.user.employee_get in project.managers.all()
|
|
or request.user.employee_get in project.members.all()
|
|
):
|
|
return function(request, *args, stage_id=stage_id, **kwargs)
|
|
messages.info(request, "You dont have permission.")
|
|
return HttpResponse("<script>window.location.reload()</script>")
|
|
# return function(request, *args, **kwargs)
|
|
|
|
return check_project_member
|
|
|
|
|
|
@decorator_with_arguments
|
|
def project_stage_delete_permission(function=None, *args, **kwargs):
|
|
def is_project_manager(
|
|
request,
|
|
stage_id=None,
|
|
*args,
|
|
**kwargs,
|
|
):
|
|
"""
|
|
This method is used to check the employee is project stage manager or not
|
|
"""
|
|
project = ProjectStage.objects.get(id=stage_id).project
|
|
if (
|
|
request.user.employee_get in project.managers.all()
|
|
or request.user.is_superuser
|
|
):
|
|
return function(request, *args, stage_id=stage_id, **kwargs)
|
|
messages.info(request, "You dont have permission.")
|
|
return HttpResponse("<script>window.location.reload()</script>")
|
|
|
|
return is_project_manager
|
|
|
|
|
|
@decorator_with_arguments
|
|
def task_update_permission(function=None, *args, **kwargs):
|
|
def is_task_member(request, task_id):
|
|
"""
|
|
This method is used to check the employee is task member or not
|
|
"""
|
|
task = Task.objects.get(id=task_id)
|
|
project = task.project
|
|
|
|
if (
|
|
request.user.has_perm("project.change_task")
|
|
or request.user.has_perm("project.change_project")
|
|
or request.user.employee_get in task.task_managers.all()
|
|
or request.user.employee_get in task.task_members.all()
|
|
or request.user.employee_get in project.managers.all()
|
|
or request.user.employee_get in project.members.all()
|
|
):
|
|
return function(request, *args, task_id=task_id, **kwargs)
|
|
|
|
messages.info(request, "You dont have permission.")
|
|
return HttpResponse("<script>window.location.reload()</script>")
|
|
|
|
return is_task_member
|
|
|
|
|
|
@decorator_with_arguments
|
|
def task_delete_permission(function=None, *args, **kwargs):
|
|
def is_task_manager(request, task_id):
|
|
"""
|
|
This method is used to check the employee is task manager or not
|
|
"""
|
|
task = Task.objects.get(id=task_id)
|
|
project = task.project
|
|
|
|
if (
|
|
request.user.is_superuser
|
|
or request.user.employee_get in task.task_managers.all()
|
|
or request.user.employee_get in project.managers.all()
|
|
):
|
|
return function(request, task_id=task_id)
|
|
|
|
messages.info(request, "You dont have permission.")
|
|
return HttpResponse("<script>window.location.reload()</script>")
|
|
|
|
return is_task_manager
|