2023-06-06 12:27:41 +05:30
"""
views . py
This module contains the view functions for handling HTTP requests and rendering
responses in your application .
Each view function corresponds to a specific URL route and performs the necessary
actions to handle the request , process data , and generate a response .
This module is part of the recruitment project and is intended to
provide the main entry points for interacting with the application ' s functionality.
"""
import json
import random
2023-05-10 15:06:57 +05:30
import secrets
from django . core . mail import send_mail
from django . utils . translation import gettext_lazy as _
from django . shortcuts import render , redirect
from django . contrib . auth import login
from django . http import HttpResponse , JsonResponse
from django . contrib import messages
from django . core . paginator import Paginator
2023-06-06 12:27:41 +05:30
from django . views . decorators . http import require_http_methods
2023-05-10 15:06:57 +05:30
from notifications . signals import notify
2023-06-06 12:27:41 +05:30
from horilla . decorators import login_required , hx_request_required
from horilla . decorators import permission_required
from recruitment . models import Candidate , Recruitment
from recruitment . filters import CandidateFilter
from employee . models import Employee , EmployeeWorkInformation , EmployeeBankDetails
from onboarding . forms import (
OnboardingCandidateForm ,
UserCreationForm ,
OnboardingViewTaskForm ,
OnboardingViewStageForm ,
EmployeeCreationForm ,
BankDetailsCreationForm ,
)
from onboarding . models import (
OnboardingStage ,
OnboardingTask ,
CandidateStage ,
CandidateTask ,
OnboardingPortal ,
)
from onboarding . decorators import (
all_manager_can_enter ,
stage_manager_can_enter ,
recruitment_manager_can_enter ,
)
2023-05-10 15:06:57 +05:30
@login_required
@hx_request_required
2023-06-06 12:27:41 +05:30
@recruitment_manager_can_enter ( " onboarding.add_onboardingstage " )
def stage_creation ( request , obj_id ) :
2023-05-10 15:06:57 +05:30
"""
function used to create onboarding stage .
Parameters :
request ( HttpRequest ) : The HTTP request object .
2023-06-06 12:27:41 +05:30
obj_id : recruitment id
2023-05-10 15:06:57 +05:30
Returns :
GET : return onboarding stage creation form template
POST : return stage save function
"""
form = OnboardingViewStageForm ( )
if request . method == " POST " :
2023-06-06 12:27:41 +05:30
recruitment = Recruitment . objects . get ( id = obj_id )
2023-05-10 15:06:57 +05:30
form = OnboardingViewStageForm ( request . POST )
if form . is_valid ( ) :
2023-06-06 12:27:41 +05:30
return stage_save ( form , recruitment , request , obj_id )
return render ( request , " onboarding/stage-form.html " , { " form " : form , " id " : obj_id } )
2023-05-10 15:06:57 +05:30
2023-06-06 12:27:41 +05:30
def stage_save ( form , recruitment , request , rec_id ) :
2023-05-10 15:06:57 +05:30
"""
function used to save onboarding stage .
Parameters :
request ( HttpRequest ) : The HTTP request object .
recruitment : recruitment object
2023-06-06 12:27:41 +05:30
rec_id : recruitment id
2023-05-10 15:06:57 +05:30
Returns :
2023-06-06 12:27:41 +05:30
GET : return onboarding view
2023-05-10 15:06:57 +05:30
"""
stage = form . save ( )
stage . recruitment_id . add ( recruitment )
stage . save ( )
messages . success ( request , _ ( " New stage created successfully.. " ) )
users = [ employee . employee_user_id for employee in stage . employee_id . all ( ) ]
notify . send (
request . user . employee_get ,
recipient = users ,
2023-05-18 15:05:28 +05:30
verb = " You are chosen as onboarding stage manager " ,
2023-07-26 12:15:01 +05:30
verb_ar = " لقد تم اختيارك كمدير مرحلة التدريب. " ,
verb_de = " Sie wurden als Onboarding-Stage-Manager ausgewählt. " ,
verb_es = " Ha sido seleccionado/a como responsable de etapa de incorporación. " ,
verb_fr = " Vous avez été choisi(e) en tant que responsable de l ' étape d ' intégration. " ,
2023-05-10 15:06:57 +05:30
icon = " people-circle " ,
redirect = " /onboarding/onboarding-view " ,
)
2023-06-06 12:27:41 +05:30
response = render (
request , " onboarding/stage-form.html " , { " form " : form , " id " : rec_id }
)
return HttpResponse (
response . content . decode ( " utf-8 " ) + " <script>location.reload();</script> "
)
2023-05-10 15:06:57 +05:30
@login_required
@hx_request_required
2023-06-06 12:27:41 +05:30
@recruitment_manager_can_enter ( " onboarding.change_onboardingstage " )
2023-05-10 15:06:57 +05:30
def stage_update ( request , stage_id , recruitment_id ) :
"""
function used to update onboarding stage .
Parameters :
request ( HttpRequest ) : The HTTP request object .
stage_id : stage id
2023-06-06 12:27:41 +05:30
recruitment_id : recruitment id
2023-05-10 15:06:57 +05:30
Returns :
GET : return onboarding stage update form template
POST : return onboarding view
"""
onboarding_stage = OnboardingStage . objects . get ( id = stage_id )
form = OnboardingViewStageForm ( instance = onboarding_stage )
2023-06-06 12:27:41 +05:30
if request . method == " POST " :
2023-05-10 15:06:57 +05:30
form = OnboardingViewStageForm ( request . POST , instance = onboarding_stage )
if form . is_valid ( ) :
stage = form . save ( )
2023-06-06 12:27:41 +05:30
messages . info ( request , _ ( " Stage is updated successfully.. " ) )
users = [ employee . employee_user_id for employee in stage . employee_id . all ( ) ]
2023-05-10 15:06:57 +05:30
notify . send (
request . user . employee_get ,
recipient = users ,
2023-05-18 15:05:28 +05:30
verb = " You are chosen as onboarding stage manager " ,
2023-07-26 12:15:01 +05:30
verb_ar = " لقد تم اختيارك كمدير مرحلة التدريب. " ,
verb_de = " Sie wurden als Onboarding-Stage-Manager ausgewählt. " ,
verb_es = " Ha sido seleccionado/a como responsable de etapa de incorporación. " ,
verb_fr = " Vous avez été choisi(e) en tant que responsable de l ' étape d ' intégration. " ,
2023-05-10 15:06:57 +05:30
icon = " people-circle " ,
redirect = " /onboarding/onboarding-view " ,
)
2023-06-06 12:27:41 +05:30
response = render (
request ,
" onboarding/stage-update.html " ,
{ " form " : form , " stage_id " : stage_id , " recruitment_id " : recruitment_id } ,
)
return HttpResponse (
response . content . decode ( " utf-8 " ) + " <script>location.reload();</script> "
)
return render (
request ,
" onboarding/stage-update.html " ,
{ " form " : form , " stage_id " : stage_id , " recruitment_id " : recruitment_id } ,
)
2023-05-10 15:06:57 +05:30
@login_required
2023-06-06 12:27:41 +05:30
@permission_required ( " onboarding.delete_onboardingstage " )
@recruitment_manager_can_enter ( " onboarding.delete_onboardingstage " )
2023-05-10 15:06:57 +05:30
def stage_delete ( request , stage_id ) :
2023-06-06 12:27:41 +05:30
"""
2023-05-10 15:06:57 +05:30
function used to delete onboarding stage .
Parameters :
request ( HttpRequest ) : The HTTP request object .
stage_id : stage id
Returns :
GET : return onboarding view
"""
onboarding_stage = OnboardingStage . objects . get ( id = stage_id )
if not onboarding_stage . candidate . exists ( ) :
onboarding_stage . delete ( )
messages . success ( request , _ ( " the stage deleted successfully... " ) )
else :
messages . error ( request , _ ( " There are candidates in this stage... " ) )
return redirect ( onboarding_view )
@login_required
@hx_request_required
2023-06-06 12:27:41 +05:30
@stage_manager_can_enter ( " onboarding.add_onboardingtask " )
def task_creation ( request , obj_id ) :
2023-05-10 15:06:57 +05:30
"""
function used to create onboarding task .
Parameters :
request ( HttpRequest ) : The HTTP request object .
2023-06-06 12:27:41 +05:30
obj_id : recruitment id
2023-05-10 15:06:57 +05:30
Returns :
GET : return onboarding task creation form template
POST : return onboarding view
"""
form = OnboardingViewTaskForm ( )
if request . method == " POST " :
2023-06-06 12:27:41 +05:30
recruitment = Recruitment . objects . get ( id = obj_id )
2023-05-10 15:06:57 +05:30
form_data = OnboardingViewTaskForm ( request . POST )
if form_data . is_valid ( ) :
task = form_data . save ( )
task . recruitment_id . add ( recruitment )
task . save ( )
2023-06-06 12:27:41 +05:30
for candidate in recruitment . candidate . filter (
hired = True , start_onboard = True
) :
CandidateTask ( candidate_id = candidate , onboarding_task_id = task ) . save ( )
2023-05-10 15:06:57 +05:30
messages . success ( request , _ ( " New task created successfully... " ) )
2023-06-06 12:27:41 +05:30
users = [ employee . employee_user_id for employee in task . employee_id . all ( ) ]
2023-05-10 15:06:57 +05:30
notify . send (
request . user . employee_get ,
recipient = users ,
2023-07-26 12:15:01 +05:30
verb = " You are chosen as an onboarding task manager " ,
verb_ar = " لقد تم اختيارك كمدير مهام التدريب. " ,
verb_de = " Sie wurden als Onboarding-Aufgabenmanager ausgewählt. " ,
verb_es = " Ha sido seleccionado/a como responsable de tareas de incorporación. " ,
verb_fr = " Vous avez été choisi(e) en tant que responsable des tâches d ' intégration. " ,
2023-05-10 15:06:57 +05:30
icon = " people-circle " ,
redirect = " /onboarding/onboarding-view " ,
)
2023-06-06 12:27:41 +05:30
response = render (
request , " onboarding/task-form.html " , { " form " : form , " id " : obj_id }
)
return HttpResponse (
response . content . decode ( " utf-8 " ) + " <script>location.reload();</script> "
)
return render ( request , " onboarding/task-form.html " , { " form " : form , " id " : obj_id } )
2023-05-10 15:06:57 +05:30
@login_required
@hx_request_required
2023-06-06 12:27:41 +05:30
@stage_manager_can_enter ( " onboarding.change_onboardingtask " )
2023-05-10 15:06:57 +05:30
def task_update ( request , task_id , recruitment_id ) :
"""
function used to update onboarding task .
Parameters :
request ( HttpRequest ) : The HTTP request object .
task_id : task id
2023-06-06 12:27:41 +05:30
recruitment_id : recruitment id
2023-05-10 15:06:57 +05:30
Returns :
GET : return onboarding task update form template
POST : return onboarding view
"""
onboarding_task = OnboardingTask . objects . get ( id = task_id )
2023-06-06 12:27:41 +05:30
if request . method == " POST " :
2023-05-10 15:06:57 +05:30
form = OnboardingViewTaskForm ( request . POST , instance = onboarding_task )
if form . is_valid ( ) :
task = form . save ( )
2023-06-06 12:27:41 +05:30
messages . info ( request , _ ( " Task updated successfully.. " ) )
users = [ employee . employee_user_id for employee in task . employee_id . all ( ) ]
2023-05-10 15:06:57 +05:30
notify . send (
request . user . employee_get ,
recipient = users ,
2023-07-26 12:15:01 +05:30
verb = " You are chosen as an onboarding task manager " ,
verb_ar = " لقد تم اختيارك كمدير مهام التدريب. " ,
verb_de = " Sie wurden als Onboarding-Aufgabenmanager ausgewählt. " ,
verb_es = " Ha sido seleccionado/a como responsable de tareas de incorporación. " ,
verb_fr = " Vous avez été choisi(e) en tant que responsable des tâches d ' intégration. " ,
2023-05-10 15:06:57 +05:30
icon = " people-circle " ,
redirect = " /onboarding/onboarding-view " ,
)
2023-06-06 12:27:41 +05:30
response = render (
request ,
" onboarding/task-update.html " ,
{ " form " : form , " task_id " : task_id , " recruitment_id " : recruitment_id } ,
)
return HttpResponse (
response . content . decode ( " utf-8 " ) + " <script>location.reload();</script> "
)
2023-05-10 15:06:57 +05:30
form = OnboardingViewTaskForm ( instance = onboarding_task )
2023-06-06 12:27:41 +05:30
return render (
request ,
" onboarding/task-update.html " ,
{ " form " : form , " task_id " : task_id , " recruitment_id " : recruitment_id } ,
)
2023-05-10 15:06:57 +05:30
@login_required
2023-06-06 12:27:41 +05:30
@permission_required ( " onboarding.delete_onboardingtask " )
@stage_manager_can_enter ( " onboarding.delete_onboardingtask " )
2023-05-10 15:06:57 +05:30
def task_delete ( request , task_id ) :
"""
function used to delete onboarding task .
Parameters :
request ( HttpRequest ) : The HTTP request object .
task_id : task id
Returns :
GET : return onboarding view
"""
onboarding_task = OnboardingTask . objects . get ( id = task_id )
onboarding_task . delete ( )
messages . success ( request , _ ( " The task deleted successfully... " ) )
return redirect ( onboarding_view )
@login_required
2023-06-06 12:27:41 +05:30
@permission_required ( " recruitment.add_candidate " )
2023-05-10 15:06:57 +05:30
def candidate_creation ( request ) :
"""
function used to create hired candidates .
Parameters :
request ( HttpRequest ) : The HTTP request object .
Returns :
GET : return candidate creation form template
POST : return candidate view
"""
form = OnboardingCandidateForm ( )
2023-06-06 12:27:41 +05:30
if request . method == " POST " :
2023-05-10 15:06:57 +05:30
form = OnboardingCandidateForm ( request . POST , request . FILES )
if form . is_valid ( ) :
candidate = form . save ( )
candidate . hired = True
candidate . save ( )
2023-06-06 12:27:41 +05:30
messages . success ( request , _ ( " New candidate created successfully.. " ) )
2023-05-10 15:06:57 +05:30
return redirect ( candidates_view )
2023-06-06 12:27:41 +05:30
return render ( request , " onboarding/candidate-creation.html " , { " form " : form } )
2023-05-10 15:06:57 +05:30
@login_required
2023-06-06 12:27:41 +05:30
@permission_required ( " recruitment.change_candidate " )
def candidate_update ( request , obj_id ) :
2023-05-10 15:06:57 +05:30
"""
function used to update hired candidates .
Parameters :
request ( HttpRequest ) : The HTTP request object .
2023-06-06 12:27:41 +05:30
obj_id : recruitment id
2023-05-10 15:06:57 +05:30
Returns :
GET : return candidate update form template
POST : return candidate view
"""
2023-06-06 12:27:41 +05:30
candidate = Candidate . objects . get ( id = obj_id )
2023-05-10 15:06:57 +05:30
form = OnboardingCandidateForm ( instance = candidate )
2023-06-06 12:27:41 +05:30
if request . method == " POST " :
form = OnboardingCandidateForm ( request . POST , request . FILES , instance = candidate )
2023-05-10 15:06:57 +05:30
if form . is_valid ( ) :
form . save ( )
2023-06-06 12:27:41 +05:30
messages . info ( request , _ ( " Candidate detail is updated successfully.. " ) )
2023-05-10 15:06:57 +05:30
return redirect ( candidates_view )
2023-06-06 12:27:41 +05:30
return render ( request , " onboarding/candidate-update.html " , { " form " : form } )
2023-05-10 15:06:57 +05:30
@login_required
2023-06-06 12:27:41 +05:30
@permission_required ( " recruitment.delete_candidate " )
def candidate_delete ( request , obj_id ) :
2023-05-10 15:06:57 +05:30
"""
function used to delete hired candidates .
Parameters :
request ( HttpRequest ) : The HTTP request object .
2023-06-06 12:27:41 +05:30
obj_id : recruitment id
2023-05-10 15:06:57 +05:30
Returns :
GET : return candidate view
"""
2023-06-06 12:27:41 +05:30
Candidate . objects . get ( id = obj_id ) . delete ( )
messages . success ( request , _ ( " Candidate deleted successfully.. " ) )
2023-05-10 15:06:57 +05:30
return redirect ( candidates_view )
def paginator_qry ( qryset , page_number ) :
"""
function used to paginate query set
"""
paginator = Paginator ( qryset , 25 )
qryset = paginator . get_page ( page_number )
return qryset
@login_required
2023-06-06 12:27:41 +05:30
@permission_required ( " candidate.view_candidate " )
2023-05-10 15:06:57 +05:30
def candidates_view ( request ) :
"""
function used to view hired candidates .
Parameters :
request ( HttpRequest ) : The HTTP request object .
Returns :
GET : return candidate view template
"""
queryset = Candidate . objects . filter ( hired = True , start_onboard = False )
2023-06-06 12:27:41 +05:30
candidate_filter_obj = CandidateFilter ( )
previous_data = request . environ [ " QUERY_STRING " ]
page_number = request . GET . get ( " page " )
2023-05-10 15:06:57 +05:30
page_obj = paginator_qry ( queryset , page_number )
2023-06-06 12:27:41 +05:30
return render (
request ,
" onboarding/candidates-view.html " ,
{
" candidates " : page_obj ,
" form " : candidate_filter_obj . form ,
" pd " : previous_data ,
} ,
)
2023-05-10 15:06:57 +05:30
@login_required
2023-06-06 12:27:41 +05:30
@permission_required ( " candidate.view_candidate " )
2023-05-10 15:06:57 +05:30
def candidate_filter ( request ) :
"""
function used to filter hired candidates .
Parameters :
request ( HttpRequest ) : The HTTP request object .
Returns :
2023-06-06 12:27:41 +05:30
GET : return candidate view template
2023-05-10 15:06:57 +05:30
"""
queryset = Candidate . objects . filter ( hired = True , start_onboard = False )
2023-06-06 12:27:41 +05:30
candidate_filter_obj = CandidateFilter ( request . GET , queryset ) . qs
previous_data = request . environ [ " QUERY_STRING " ]
page_number = request . GET . get ( " page " )
page_obj = paginator_qry ( candidate_filter_obj , page_number )
return render (
request ,
" onboarding/candidates.html " ,
{ " candidates " : page_obj , " pd " : previous_data } ,
)
2023-05-10 15:06:57 +05:30
@login_required
def email_send ( request ) :
"""
function used to send onboarding portal for hired candidates .
Parameters :
request ( HttpRequest ) : The HTTP request object .
Returns :
GET : return json response
"""
2023-06-06 12:27:41 +05:30
if request . method != " POST " :
return JsonResponse ( " " , safe = False )
candidates = request . POST . get ( " candidates " )
2023-05-10 15:06:57 +05:30
json_mylist = json . loads ( candidates )
if len ( json_mylist ) < = 0 :
2023-06-06 12:27:41 +05:30
return JsonResponse ( { " message " : _ ( " No candidate choosed " ) , " tags " : " danger " } )
for cand_id in json_mylist :
candidate = Candidate . objects . get ( id = cand_id )
if candidate . start_onboard is False :
2023-05-10 15:06:57 +05:30
token = secrets . token_hex ( 15 )
OnboardingPortal ( candidate_id = candidate , token = token ) . save ( )
send_mail (
2023-06-06 12:27:41 +05:30
" Onboarding Portal " ,
f " { request . get_host ( ) } /onboarding/user-creation/ { token } " ,
" from@example.com " ,
2023-05-10 15:06:57 +05:30
[ candidate . email ] ,
fail_silently = False ,
)
candidate . start_onboard = True
candidate . save ( )
2023-06-06 12:27:41 +05:30
return JsonResponse ( { " message " : _ ( " Email send successfully " ) , " tags " : " success " } )
2023-05-10 15:06:57 +05:30
@login_required
2023-06-06 12:27:41 +05:30
@all_manager_can_enter ( " onboarding.view_candidatestage " )
2023-05-10 15:06:57 +05:30
def onboarding_view ( request ) :
"""
function used to view onboarding main view .
Parameters :
request ( HttpRequest ) : The HTTP request object .
Returns :
GET : return onboarding view template
"""
candidates = Candidate . objects . filter ( hired = True , start_onboard = True )
for candidate in candidates :
if not CandidateStage . objects . filter ( candidate_id = candidate ) . exists ( ) :
try :
onboarding_stage = OnboardingStage . objects . filter (
2023-06-06 12:27:41 +05:30
recruitment_id = candidate . recruitment_id
) . order_by ( " sequence " ) [ 0 ]
CandidateStage (
candidate_id = candidate , onboarding_stage_id = onboarding_stage
) . save ( )
except Exception :
messages . error (
request ,
_ ( " %(recruitment)s has no stage.. " )
% { " recruitment " : candidate . recruitment_id } ,
)
2023-05-10 15:06:57 +05:30
if tasks := OnboardingTask . objects . filter (
recruitment_id = candidate . recruitment_id
) :
for task in tasks :
2023-06-06 12:27:41 +05:30
if not CandidateTask . objects . filter (
candidate_id = candidate , onboarding_task_id = task
) . exists ( ) :
CandidateTask (
candidate_id = candidate , onboarding_task_id = task
) . save ( )
2023-05-10 15:06:57 +05:30
recruitments = Recruitment . objects . all ( )
onboarding_stages = OnboardingStage . objects . all ( )
choices = CandidateTask . Choice
2023-06-06 12:27:41 +05:30
return render (
request ,
" onboarding/onboarding-view.html " ,
{
" recruitments " : recruitments ,
" onboarding_stages " : onboarding_stages ,
" choices " : choices ,
} ,
)
2023-05-10 15:06:57 +05:30
def user_creation ( request , token ) :
"""
function used to create user account in onboarding portal .
Parameters :
request ( HttpRequest ) : The HTTP request object .
token : random generated onboarding portal token
Returns :
GET : return user creation form template
POST : return user_save function
"""
try :
onboarding_portal = OnboardingPortal . objects . get ( token = token )
form = UserCreationForm ( )
2023-06-06 12:27:41 +05:30
if not onboarding_portal or onboarding_portal . used is True :
return HttpResponse ( " Denied " )
2023-05-10 15:06:57 +05:30
try :
2023-06-06 12:27:41 +05:30
if request . method == " POST " :
2023-05-10 15:06:57 +05:30
form = UserCreationForm ( request . POST )
if form . is_valid ( ) :
return user_save ( form , onboarding_portal , request , token )
2023-06-06 12:27:41 +05:30
except Exception :
messages . error ( request , _ ( " User with email-id already exists.. " ) )
return render (
request ,
" onboarding/user-creation.html " ,
{
" form " : form ,
" company " : onboarding_portal . candidate_id . recruitment_id . company_id ,
} ,
)
except Exception as error :
return HttpResponse ( error )
2023-05-10 15:06:57 +05:30
def user_save ( form , onboarding_portal , request , token ) :
"""
function used to save user .
Parameters :
request ( HttpRequest ) : The HTTP request object .
onboarding_portal : onboarding portal object
token : random generated onboarding portal token
Returns :
GET : return profile view
"""
user = form . save ( commit = False )
user . username = onboarding_portal . candidate_id . email
user . save ( )
onboarding_portal . used = True
onboarding_portal . save ( )
login ( request , user )
onboarding_portal . count + = 1
onboarding_portal . save ( )
messages . success ( request , _ ( " Account created successfully.. " ) )
2023-06-06 12:27:41 +05:30
return redirect ( " profile-view " , token )
2023-05-10 15:06:57 +05:30
def profile_view ( request , token ) :
"""
function used to view user profile .
Parameters :
request ( HttpRequest ) : The HTTP request object .
token : random generated onboarding portal token
Returns :
GET : return user profile template
POST : update profile image of the user
"""
candidate = Candidate . objects . get ( email = request . user )
2023-06-06 12:27:41 +05:30
if request . method == " POST " :
profile = request . FILES . get ( " profile " )
2023-05-10 15:06:57 +05:30
if profile is not None :
candidate . profile = profile
candidate . save ( )
2023-06-06 12:27:41 +05:30
messages . success ( request , _ ( " Profile picture updated successfully.. " ) )
return render (
request ,
" onboarding/profile-view.html " ,
{
" candidate " : candidate ,
" token " : token ,
" company " : candidate . recruitment_id . company_id ,
} ,
)
2023-05-10 15:06:57 +05:30
def employee_creation ( request , token ) :
"""
function used to create employee .
Parameters :
request ( HttpRequest ) : The HTTP request object .
token : random generated onboarding portal token .
Returns :
GET : return employee creation profile template .
POST : return employee bank detail creation template .
"""
candidate = Candidate . objects . get ( email = request . user )
onboarding_portal = OnboardingPortal . objects . get ( token = token )
2023-06-06 12:27:41 +05:30
form = EmployeeCreationForm (
initial = {
" employee_first_name " : candidate . name ,
" phone " : candidate . mobile ,
" address " : candidate . address ,
" dob " : candidate . dob ,
}
)
2023-05-10 15:06:57 +05:30
if not Employee . objects . filter ( employee_user_id = request . user ) . exists ( ) :
2023-06-06 12:27:41 +05:30
if request . method == " POST " :
2023-05-10 15:06:57 +05:30
form_data = EmployeeCreationForm ( request . POST )
if form_data . is_valid ( ) :
employee_personal_info = form_data . save ( commit = False )
employee_personal_info . employee_user_id = request . user
employee_personal_info . email = candidate . email
employee_personal_info . employee_profile = candidate . profile
employee_personal_info . save ( )
2023-06-06 12:27:41 +05:30
EmployeeWorkInformation (
employee_id = employee_personal_info ,
date_joining = candidate . joining_date ,
job_position_id = candidate . recruitment_id . job_position_id ,
) . save ( )
2023-05-10 15:06:57 +05:30
onboarding_portal . count + = 1
onboarding_portal . save ( )
2023-06-06 12:27:41 +05:30
messages . success (
request , _ ( " Employee personal details created successfully.. " )
)
return redirect ( " employee-bank-details " , token )
2023-05-10 15:06:57 +05:30
onboarding_portal . count + = 1
onboarding_portal . save ( )
2023-06-06 12:27:41 +05:30
return render (
request ,
" onboarding/employee-creation.html " ,
{ " form " : form , " employee " : candidate . recruitment_id . company_id } ,
)
return redirect ( " employee-bank-details " , token )
2023-05-10 15:06:57 +05:30
def employee_bank_details ( request , token ) :
"""
function used to create employee bank details creation .
Parameters :
request ( HttpRequest ) : The HTTP request object .
token : random generated onboarding portal token
Returns :
GET : return bank details creation template
POST : return employee_bank_details_save function
"""
onboarding_portal = OnboardingPortal . objects . get ( token = token )
form = BankDetailsCreationForm ( )
employee_id = request . user . employee_get
if not EmployeeBankDetails . objects . filter ( employee_id = employee_id ) . exists ( ) :
2023-06-06 12:27:41 +05:30
if request . method == " POST " :
2023-05-10 15:06:57 +05:30
form = BankDetailsCreationForm ( request . POST )
if form . is_valid ( ) :
2023-06-06 12:27:41 +05:30
return employee_bank_details_save ( form , request , onboarding_portal )
return render (
request ,
" onboarding/employee-bank-details.html " ,
{
" form " : form ,
" company " : onboarding_portal . candidate_id . recruitment_id . company_id ,
} ,
)
2023-05-10 15:06:57 +05:30
return redirect ( welcome_aboard )
def employee_bank_details_save ( form , request , onboarding_portal ) :
"""
function used to save employee bank details .
Parameters :
request ( HttpRequest ) : The HTTP request object .
form : Form object .
onboarding_portal : Onboarding portal object .
Returns :
GET : return welcome onboard view
"""
employee_bank_detail = form . save ( commit = False )
employee_bank_detail . employee_id = Employee . objects . get (
2023-06-06 12:27:41 +05:30
employee_user_id = request . user
)
2023-05-10 15:06:57 +05:30
employee_bank_detail . save ( )
onboarding_portal . count + = 1
onboarding_portal . save ( )
2023-06-06 12:27:41 +05:30
messages . success ( request , _ ( " Employee bank details created successfully.. " ) )
2023-05-10 15:06:57 +05:30
return redirect ( welcome_aboard )
@login_required
def welcome_aboard ( request ) :
"""
function used to view welcome aboard .
Parameters :
request ( HttpRequest ) : The HTTP request object .
Returns :
GET : return welcome onboard view
"""
2023-06-06 12:27:41 +05:30
return render ( request , " onboarding/welcome-aboard.html " )
2023-05-10 15:06:57 +05:30
@login_required
@hx_request_required
2023-06-06 12:27:41 +05:30
@require_http_methods ( [ " POST " ] )
@all_manager_can_enter ( " onboarding.change_candidatetask " )
def candidate_task_update ( request , obj_id ) :
2023-05-10 15:06:57 +05:30
"""
function used to update candidate task .
Parameters :
request ( HttpRequest ) : The HTTP request object .
2023-06-06 12:27:41 +05:30
obj_id : candidate task id
2023-05-10 15:06:57 +05:30
Returns :
POST : return candidate task template
"""
2023-06-06 12:27:41 +05:30
status = request . POST . get ( " task " )
candidate_task = CandidateTask . objects . get ( id = obj_id )
candidate_task . status = status
candidate_task . save ( )
users = [
employee . employee_user_id
for employee in candidate_task . onboarding_task_id . employee_id . all ( )
]
notify . send (
request . user . employee_get ,
recipient = users ,
verb = f " The task { candidate_task . onboarding_task_id } of \
{ candidate_task . candidate_id } was updated to { candidate_task . status } . " ,
2023-07-26 12:15:01 +05:30
verb_ar = f " تم تحديث المهمة { candidate_task . onboarding_task_id } للمرشح { candidate_task . candidate_id } إلى { candidate_task . status } . " ,
verb_de = f " Die Aufgabe { candidate_task . onboarding_task_id } des Kandidaten { candidate_task . candidate_id } wurde auf { candidate_task . status } aktualisiert. " ,
verb_es = f " La tarea { candidate_task . onboarding_task_id } del candidato { candidate_task . candidate_id } se ha actualizado a { candidate_task . status } . " ,
verb_fr = f " La tâche { candidate_task . onboarding_task_id } du candidat { candidate_task . candidate_id } a été mise à jour à { candidate_task . status } . " ,
2023-06-06 12:27:41 +05:30
icon = " people-circle " ,
redirect = " /onboarding/onboarding-view " ,
)
messages . info ( request , _ ( " Candidate task updated successfully.. " ) )
choices = CandidateTask . Choice
return render (
request ,
" onboarding/candidate-task.html " ,
{ " choices " : choices , " task " : candidate_task } ,
)
2023-05-10 15:06:57 +05:30
@login_required
@hx_request_required
2023-06-06 12:27:41 +05:30
@require_http_methods ( [ " POST " ] )
@stage_manager_can_enter ( " onboarding.change_candidatestage " )
2023-05-10 15:06:57 +05:30
def candidate_stage_update ( request , candidate_id , recruitment_id ) :
"""
function used to update candidate stage .
Parameters :
request ( HttpRequest ) : The HTTP request object .
candidate_id : Candidate id
recruitment_id : Recruitment id
Returns :
POST : return candidate task template
"""
2023-06-06 12:27:41 +05:30
stage_id = request . POST . get ( " stage " )
recruitment = Recruitment . objects . get ( id = recruitment_id )
stage = OnboardingStage . objects . get ( id = stage_id )
candidate = Candidate . objects . get ( id = candidate_id )
candidate_stage = CandidateStage . objects . get ( candidate_id = candidate )
candidate_stage . onboarding_stage_id = stage
candidate_stage . save ( )
onboarding_stages = OnboardingStage . objects . all ( )
choices = CandidateTask . Choice
messages . info ( request , _ ( " Candidate stage updated successfully... " ) )
users = [
employee . employee_user_id
for employee in candidate_stage . onboarding_stage_id . employee_id . all ( )
]
notify . send (
request . user . employee_get ,
recipient = users ,
verb = f " The stage of { candidate_stage . candidate_id } \
was updated to { candidate_stage . onboarding_stage_id } . " ,
2023-07-26 12:15:01 +05:30
verb_ar = f " تم تحديث مرحلة المرشح { candidate_stage . candidate_id } إلى { candidate_stage . onboarding_stage_id } . " ,
verb_de = f " Die Phase des Kandidaten { candidate_stage . candidate_id } wurde auf { candidate_stage . onboarding_stage_id } aktualisiert. " ,
verb_es = f " La etapa del candidato { candidate_stage . candidate_id } se ha actualizado a { candidate_stage . onboarding_stage_id } . " ,
verb_fr = f " L ' étape du candidat { candidate_stage . candidate_id } a été mise à jour à { candidate_stage . onboarding_stage_id } . " ,
2023-06-06 12:27:41 +05:30
icon = " people-circle " ,
redirect = " /onboarding/onboarding-view " ,
)
return render (
request ,
" onboarding/onboarding-table.html " ,
{
" recruitment " : recruitment ,
" onboarding_stages " : onboarding_stages ,
" choices " : choices ,
} ,
)
2023-05-10 15:06:57 +05:30
@login_required
2023-06-06 12:27:41 +05:30
def hired_candidate_chart ( _ ) :
2023-05-10 15:06:57 +05:30
"""
function used to show hired candidates in all recruitments .
Parameters :
request ( HttpRequest ) : The HTTP request object .
Returns :
GET : return Json response labels , data , background_color , border_color .
"""
labels = [ ]
data = [ ]
background_color = [ ]
border_color = [ ]
recruitments = Recruitment . objects . all ( )
for recruitment in recruitments :
2023-06-06 12:27:41 +05:30
red = random . randint ( 0 , 255 )
green = random . randint ( 0 , 255 )
blue = random . randint ( 0 , 255 )
background_color . append ( f " rgba( { red } , { green } , { blue } , 0.2 " )
border_color . append ( f " rgb( { red } , { green } , { blue } ) " )
2023-05-10 15:06:57 +05:30
labels . append ( f " { recruitment } " )
2023-06-06 12:27:41 +05:30
data . append ( recruitment . candidate . filter ( hired = True ) . count ( ) )
return JsonResponse (
{
" labels " : labels ,
" data " : data ,
" background_color " : background_color ,
" border_color " : border_color ,
} ,
safe = False ,
)
2023-05-10 15:06:57 +05:30
@login_required
2023-06-06 12:27:41 +05:30
def onboard_candidate_chart ( _ ) :
2023-05-10 15:06:57 +05:30
"""
function used to show onboard started candidates in recruitments .
Parameters :
request ( HttpRequest ) : The HTTP request object .
Returns :
GET : return Json response labels , data , background_color , border_color .
"""
labels = [ ]
data = [ ]
background_color = [ ]
border_color = [ ]
recruitments = Recruitment . objects . all ( )
for recruitment in recruitments :
2023-06-06 12:27:41 +05:30
red = random . randint ( 0 , 255 )
green = random . randint ( 0 , 255 )
blue = random . randint ( 0 , 255 )
background_color . append ( f " rgba( { red } , { green } , { blue } , 0.2 " )
border_color . append ( f " rgb( { red } , { green } , { blue } ) " )
2023-05-10 15:06:57 +05:30
labels . append (
2023-08-03 10:31:34 +05:30
f " { recruitment . title } | { recruitment . start_date } "
2023-06-06 12:27:41 +05:30
)
data . append (
recruitment . candidate . filter ( hired = True , start_onboard = True ) . count ( )
)
return JsonResponse (
{
" labels " : labels ,
" data " : data ,
" background_color " : background_color ,
" border_color " : border_color ,
} ,
safe = False ,
)
@login_required
@permission_required ( " candidate.view_candidate " )
def update_joining ( request ) :
"""
Ajax method to update joinng date
"""
print ( request . POST )
cand_id = request . POST [ " candId " ]
date = request . POST [ " date " ]
candidate_obj = Candidate . objects . get ( id = cand_id )
candidate_obj . joining_date = date
candidate_obj . save ( )
return JsonResponse ( { " message " : " Success " } )