[FIX] ONBOARDING: #808
This commit is contained in:
@@ -57,15 +57,14 @@ def any_permission_required(function, perms):
|
|||||||
def _function(request, *args, **kwargs):
|
def _function(request, *args, **kwargs):
|
||||||
if any(request.user.has_perm(perm) for perm in perms):
|
if any(request.user.has_perm(perm) for perm in perms):
|
||||||
return function(request, *args, **kwargs)
|
return function(request, *args, **kwargs)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
messages.info(request, "You dont have permission.")
|
messages.info(request, "You don’t have permission.")
|
||||||
previous_url = request.META.get("HTTP_REFERER", "/")
|
previous_url = request.META.get("HTTP_REFERER", "/")
|
||||||
key = "HTTP_HX_REQUEST"
|
if request.META.get("HTTP_HX_REQUEST"):
|
||||||
if key in request.META.keys():
|
|
||||||
return render(request, "decorator_404.html")
|
return render(request, "decorator_404.html")
|
||||||
script = f'<script>window.location.href = "{previous_url}"</script>'
|
return HttpResponse(
|
||||||
return HttpResponse(script)
|
f'<script>window.location.href = "{previous_url}"</script>'
|
||||||
|
)
|
||||||
|
|
||||||
return _function
|
return _function
|
||||||
|
|
||||||
|
|||||||
@@ -103,6 +103,14 @@ class OnboardingTask(HorillaModel):
|
|||||||
verbose_name_plural = _("Onboarding Tasks")
|
verbose_name_plural = _("Onboarding Tasks")
|
||||||
|
|
||||||
|
|
||||||
|
class OnboardingCandidate(Candidate):
|
||||||
|
class Meta:
|
||||||
|
proxy = True
|
||||||
|
verbose_name = _("Onboarding Candidate")
|
||||||
|
verbose_name_plural = _("Onboarding Candidates")
|
||||||
|
app_label = "onboarding"
|
||||||
|
|
||||||
|
|
||||||
class CandidateStage(HorillaModel):
|
class CandidateStage(HorillaModel):
|
||||||
"""
|
"""
|
||||||
CandidateStage model
|
CandidateStage model
|
||||||
|
|||||||
@@ -41,11 +41,11 @@ def onboarding_view_accessibility(
|
|||||||
request, _submenu: dict = {}, user_perms: PermWrapper = [], *args, **kwargs
|
request, _submenu: dict = {}, user_perms: PermWrapper = [], *args, **kwargs
|
||||||
) -> bool:
|
) -> bool:
|
||||||
return is_taskmanager(request.user) or request.user.has_perm(
|
return is_taskmanager(request.user) or request.user.has_perm(
|
||||||
"onboarding.view_onboarding"
|
"onboarding.view_onboardingstage"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def candidates_view_accessibility(
|
def candidates_view_accessibility(
|
||||||
request, _submenu: dict = {}, user_perms: PermWrapper = [], *args, **kwargs
|
request, _submenu: dict = {}, user_perms: PermWrapper = [], *args, **kwargs
|
||||||
) -> bool:
|
) -> bool:
|
||||||
return request.user.has_perm("recruitment.view_candidate")
|
return request.user.has_perm("onboarding.view_onboardingcandidate")
|
||||||
|
|||||||
@@ -421,14 +421,14 @@ def candidate_update(request, obj_id):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required("recruitment.delete_candidate")
|
@permission_required("onboarding.delete_onboardingcandidate")
|
||||||
def candidate_delete(request, obj_id):
|
def candidate_delete(request, obj_id):
|
||||||
"""
|
"""
|
||||||
function used to delete hired candidates .
|
function used to delete hired candidates .
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
request (HttpRequest): The HTTP request object.
|
request (HttpRequest): The HTTP request object.
|
||||||
obj_id : recruitment id
|
obj_id : candidate id
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
GET : return candidate view
|
GET : return candidate view
|
||||||
@@ -520,7 +520,7 @@ def paginator_qry(qryset, page_number):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required(perm="recruitment.view_candidate")
|
@permission_required(perm="onboarding.view_onboardingcandidate")
|
||||||
def candidates_view(request):
|
def candidates_view(request):
|
||||||
"""
|
"""
|
||||||
function used to view hired candidates .
|
function used to view hired candidates .
|
||||||
@@ -581,7 +581,7 @@ def hired_candidate_view(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@hx_request_required
|
@hx_request_required
|
||||||
@permission_required(perm="recruitment.view_candidate")
|
@permission_required(perm="onboarding.view_onboardingcandidate")
|
||||||
def candidate_filter(request):
|
def candidate_filter(request):
|
||||||
"""
|
"""
|
||||||
function used to filter hired candidates .
|
function used to filter hired candidates .
|
||||||
@@ -780,7 +780,7 @@ def onboarding_query_grouper(request, queryset):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@all_manager_can_enter("onboarding.view_candidatestage")
|
@all_manager_can_enter("onboarding.view_onboardingstage")
|
||||||
def onboarding_view(request):
|
def onboarding_view(request):
|
||||||
"""
|
"""
|
||||||
function used to view onboarding main view.
|
function used to view onboarding main view.
|
||||||
@@ -794,7 +794,7 @@ def onboarding_view(request):
|
|||||||
filter_obj = RecruitmentFilter(request.GET)
|
filter_obj = RecruitmentFilter(request.GET)
|
||||||
# is active filteration not providing on pipeline
|
# is active filteration not providing on pipeline
|
||||||
recruitments = filter_obj.qs
|
recruitments = filter_obj.qs
|
||||||
if not request.user.has_perm("onboarding.view_candidatestage"):
|
if not request.user.has_perm("onboarding.view_onboardingstage"):
|
||||||
recruitments = recruitments.filter(
|
recruitments = recruitments.filter(
|
||||||
is_active=True, recruitment_managers__in=[request.user.employee_get]
|
is_active=True, recruitment_managers__in=[request.user.employee_get]
|
||||||
) | recruitments.filter(
|
) | recruitments.filter(
|
||||||
@@ -841,7 +841,7 @@ def onboarding_view(request):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@all_manager_can_enter("onboarding.view_candidatestage")
|
@all_manager_can_enter("onboarding.view_onboardingstage")
|
||||||
def kanban_view(request):
|
def kanban_view(request):
|
||||||
# filter_obj = RecruitmentFilter(request.GET)
|
# filter_obj = RecruitmentFilter(request.GET)
|
||||||
# # is active filteration not providing on pipeline
|
# # is active filteration not providing on pipeline
|
||||||
@@ -849,7 +849,7 @@ def kanban_view(request):
|
|||||||
filter_obj = RecruitmentFilter(request.GET)
|
filter_obj = RecruitmentFilter(request.GET)
|
||||||
# is active filteration not providing on pipeline
|
# is active filteration not providing on pipeline
|
||||||
recruitments = filter_obj.qs
|
recruitments = filter_obj.qs
|
||||||
if not request.user.has_perm("onboarding.view_candidatestage"):
|
if not request.user.has_perm("onboarding.view_onboardingstage"):
|
||||||
recruitments = recruitments.filter(
|
recruitments = recruitments.filter(
|
||||||
is_active=True, recruitment_managers__in=[request.user.employee_get]
|
is_active=True, recruitment_managers__in=[request.user.employee_get]
|
||||||
) | recruitments.filter(
|
) | recruitments.filter(
|
||||||
|
|||||||
@@ -58,49 +58,46 @@ def decorator_with_arguments(decorator):
|
|||||||
|
|
||||||
|
|
||||||
@decorator_with_arguments
|
@decorator_with_arguments
|
||||||
def manager_can_enter(function, perm):
|
def manager_can_enter(function, perm=None, perms=None):
|
||||||
"""
|
"""
|
||||||
Decorator that checks if the user has the specified permission or is a manager.
|
Decorator that checks if the user has the specified permission(s) or is a manager.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
perm (str): The permission to check.
|
perm (str): A single permission string.
|
||||||
|
perms (list): A list of permission strings.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
function: The decorated function.
|
function: The decorated view.
|
||||||
|
|
||||||
Raises:
|
|
||||||
None
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def _function(request, *args, **kwargs):
|
def _function(request, *args, **kwargs):
|
||||||
"""
|
|
||||||
Inner function that performs the permission and manager check.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request (HttpRequest): The request object.
|
|
||||||
*args: Variable length argument list.
|
|
||||||
**kwargs: Arbitrary keyword arguments.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
HttpResponse: The response from the decorated function.
|
|
||||||
|
|
||||||
"""
|
|
||||||
user = request.user
|
user = request.user
|
||||||
employee = Employee.objects.filter(employee_user_id=user).first()
|
employee = Employee.objects.filter(employee_user_id=user).first()
|
||||||
|
|
||||||
is_manager = (
|
is_manager = (
|
||||||
Stage.objects.filter(stage_managers=employee).exists()
|
Stage.objects.filter(stage_managers=employee).exists()
|
||||||
or Recruitment.objects.filter(recruitment_managers=employee).exists()
|
or Recruitment.objects.filter(recruitment_managers=employee).exists()
|
||||||
)
|
)
|
||||||
if user.has_perm(perm) or is_manager:
|
|
||||||
|
# Combine perm and perms into one list to check
|
||||||
|
all_perms = []
|
||||||
|
if perm:
|
||||||
|
all_perms.append(perm)
|
||||||
|
if perms:
|
||||||
|
all_perms.extend(perms)
|
||||||
|
|
||||||
|
has_required_perm = any(user.has_perm(p) for p in all_perms)
|
||||||
|
|
||||||
|
if has_required_perm or is_manager:
|
||||||
return function(request, *args, **kwargs)
|
return function(request, *args, **kwargs)
|
||||||
messages.info(request, "You dont have permission.")
|
|
||||||
|
messages.info(request, "You don't have permission.")
|
||||||
previous_url = request.META.get("HTTP_REFERER", "/")
|
previous_url = request.META.get("HTTP_REFERER", "/")
|
||||||
script = f'<script>window.location.href = "{previous_url}"</script>'
|
|
||||||
key = "HTTP_HX_REQUEST"
|
if request.META.get("HTTP_HX_REQUEST"):
|
||||||
if key in request.META.keys():
|
|
||||||
return render(request, "decorator_404.html")
|
return render(request, "decorator_404.html")
|
||||||
return HttpResponse(script)
|
|
||||||
|
return HttpResponse(f'<script>window.location.href = "{previous_url}"</script>')
|
||||||
|
|
||||||
return _function
|
return _function
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ from employee.models import Employee, EmployeeWorkInformation
|
|||||||
from employee.views import get_content_type
|
from employee.views import get_content_type
|
||||||
from horilla import settings
|
from horilla import settings
|
||||||
from horilla.decorators import (
|
from horilla.decorators import (
|
||||||
|
any_permission_required,
|
||||||
hx_request_required,
|
hx_request_required,
|
||||||
logger,
|
logger,
|
||||||
login_required,
|
login_required,
|
||||||
@@ -1318,7 +1319,9 @@ def stage_title_update(request, stage_id):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required(perm="recruitment.add_candidate")
|
@any_permission_required(
|
||||||
|
perms=["recruitment.add_candidate", "onboarding.add_onboardingcandidate"]
|
||||||
|
)
|
||||||
def candidate(request):
|
def candidate(request):
|
||||||
"""
|
"""
|
||||||
This method used to create candidate
|
This method used to create candidate
|
||||||
@@ -1639,7 +1642,9 @@ def candidate_view_individual(request, cand_id, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@manager_can_enter(perm="recruitment.change_candidate")
|
@manager_can_enter(
|
||||||
|
perms=["recruitment.change_candidate", "onboarding.change_onboardingcandidate"]
|
||||||
|
)
|
||||||
def candidate_update(request, cand_id, **kwargs):
|
def candidate_update(request, cand_id, **kwargs):
|
||||||
"""
|
"""
|
||||||
Used to update or change the candidate
|
Used to update or change the candidate
|
||||||
|
|||||||
Reference in New Issue
Block a user