
    si!                    v	   d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z' ddl%m(Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z= ddl>m?Z? ddl@mAZAmBZBmCZCmDZD ddlEmFZG ddlHmIZI ddlJmKZK ddlLmMZMmNZNmOZO ddlPmQZQmRZR ddlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ dd l[m\Z\m]Z]m^Z^m_Z_m`Z` dd!lambZbmcZcmdZd dd"lemfZf dd#lgmhZhmiZimjZj ddlkmFZF  ej                  em      ZBeCeA eNd$      d%                      Znd& ZoeCeA eNd'      d(                      ZpeC eNd'      d)               ZqeC eDd*       eNd*      d+                      ZreCeA eOd,      d-                      ZseCeA eOd.      d/                      ZteC eDd0       eOd0      d1                      ZueC eDd2      d3               ZveC eDd4      d5               ZweC eDd6      d7               ZxeCeA eMd8      d9                      Zyd: ZzeC eDd;<      d=               Z{eC eDd><      d?               Z|eCeA eDd;<      d@                      Z}eC eMdA      dB               Z~dC ZeC eMdD      dE               ZeC eMdD      dF               Zi ZdG ZdH ZdI ZdJ ZdK ZdL ZeCdM        ZeC e-dNg       eMdO      dP                      ZeCdQ        ZeC eMdO      dR               ZeC e-dNg       eOdS      dT                      ZeC e-dNg       eOdS      dU                      ZeC e-dNg       eMdO      dV                      ZeCdW        ZeC eDdX      e+e.dY                             ZeC eDd><      dZ               ZeC eDd><      d[               ZeC eOd4      d\               ZeC eOd]      d^               ZeC e-dNg      eAd_                      ZeCeA eOd4      d`                      ZeC eOd]      e+e.da                             ZeCeA eMd.      db                      ZeC eMdc      dd               ZeC eMdO      de               ZeC eDdf      dg               ZeCeA eDdh      di                      ZeCdj        ZeC eDd>      dk               Zdl Zdm Zy)na  
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.
    N)parse_qs)template)messages)login)User)ContentFile)EmailMessage	send_mail)	Paginator)ProtectedError)HttpResponseHttpResponseRedirectJsonResponse)redirectrender)render_to_string)reverse)gettext)gettext_lazy)csrf_exempt)require_http_methodsrequire_POST)ConfiguredEmailBackend)closest_numbersgenerate_pdfget_key_instancesget_paginationsortby)HorillaMailTemplateJobPosition)EmployeeEmployeeBankDetailsEmployeeWorkInformation)settings)hx_request_requiredloggerlogin_requiredpermission_required)group_by_queryset)Document)notify)all_manager_can_enterrecruitment_manager_can_enterstage_manager_can_enter)OnboardingCandidateFilterOnboardingStageFilter)BankDetailsCreationFormEmployeeCreationFormOnboardingCandidateFormOnboardingTaskFormOnboardingViewStageFormOnboardingViewTaskFormUserCreationForm)CandidateStageCandidateTaskOnboardingPortalOnboardingStageOnboardingTask)CandidateFilterCandidateReGroupRecruitmentFilter)RejectedCandidateForm)	CandidateRecruitmentRejectedCandidatezonboarding.add_onboardingstagec                    t               }| j                  dk(  rt        j                  j	                  |      }t        | j
                        }|j                         rp|j                         }|j                  j                  t        j                  j                  |j                  j                  d                   t        ||| |      S t        | d||d      S )a  
    function used to create onboarding stage.

    Parameters:
    request (HttpRequest): The HTTP request object.
    obj_id : recruitment id

    Returns:
    GET : return onboarding stage creation form template
    POST : return stage save function
    POSTidemployee_idid__inonboarding/stage_form.htmlformrG   )r5   methodrB   objectsgetrE   is_validsaverH   setr!   filterdatagetlist
stage_saver   )requestobj_idrM   recruitment	stage_objs        4/var/www/python-projects/worksol/onboarding/views.pystage_creationr]   Y   s     #$D~~!))---8&w||4==?		I!!%%  ''tyy/@/@/O'P dK&AA'7$f9UVV    c                    | j                  d      }||_        |j                          t        j                  |t	        d             |j
                  j                         D cg c]  }|j                   }}t        j                  |j                  j                  |dddddd	t        d
      	       t        |d| |d      }t        |j                  j!                  d      dz         S c c}w )z
    function used to save onboarding stage.

    Parameters:
    request (HttpRequest): The HTTP request object.
    recruitment : recruitment object
    rec_id : recruitment id

    Returns:
    GET : return onboarding view
    Fcommitz New stage created successfully..*You are chosen as onboarding stage manager@   لقد تم اختيارك كمدير مرحلة التدريب.4   Sie wurden als Onboarding-Stage-Manager ausgewählt.C   Ha sido seleccionado/a como responsable de etapa de incorporación.M   Vous avez été choisi(e) en tant que responsable de l'étape d'intégration.people-circleonboarding-view	recipientverbverb_arverb_deverb_esverb_friconr   rK   rL   utf-8#<script>location.reload();</script>)rR   recruitment_idr   success_rH   allemployee_user_idr+   senduseremployee_getr   r   r   contentdecode)rM   rZ   rX   rec_idstageemployeeusersresponses           r\   rW   rW   u   s     IIUI#E&E	JJLWa BCD7<7H7H7L7L7NO8X&&OEO
KK!!9RFU_*+
 -F/KH (+PP  Ps   %C,z!onboarding.change_onboardingstagec                 @   t         j                  j                  |      }t        |      }| j                  dk(  rMt        | j
                  |      }|j                         r%|j                         }|j                  j                  t        j                  j                  |j                  j                  d                   t        j                  | t!        d             |j                  j#                         D cg c]  }|j$                   }}t'        j(                  | j*                  j,                  |ddd	d
ddt/        d      	       t1        | d|||d      }t3        |j4                  j7                  d      dz         S t1        | d|||d      S c c}w )a  
    function used to update onboarding stage.

    Parameters:
    request (HttpRequest): The HTTP request object.
    stage_id : stage id
    recruitment_id : recruitment id

    Returns:
    GET : return onboarding stage update form template
    POST : return onboarding view
    rF   instancerE   rH   rI   zStage is updated successfully..rb   rc   rd   re   rf   rg   rh   ri   zonboarding/stage_update.html)rM   stage_idrs   rq   rr   )r;   rO   rP   r5   rN   rE   rQ   rR   rH   rS   r!   rT   rU   rV   r   rt   ru   rv   rw   r+   rx   ry   rz   r   r   r   r{   r|   )	rX   r   rs   onboarding_stagerM   r~   r   r   r   s	            r\   stage_updater      su     '..22h2?",<=D~~&w||>NO==?IIKE!!  ''tyy/@/@/O'P Wa(I&JK?D?P?P?T?T?VW8X..WEWKK))AZN]g$ !23
 .8~VH
    ''03XX  &8~N ) Xs   Fc                 x   t         j                  j                  |      }| j                  dk(  r	 t	        j
                  | j                  j                  dd            }t        |      D ];  \  }}|j                  j                  |      }|dz   |_	        |j                          = t        j                  | d       t        ddi      S |j                  j#                  d      }t%        | d||d      S # t        $ r9}t        j                  | d	       t        d
t!        |      dd      cY d}~S d}~ww xY w)zL
    This method is used to update the stage sequence of the onboarding
    rF   rE   orderz[]   zSequence Updated Successfullystatusrt   zError Updating Sequence..error)r   message  r   Nsequencez(cbv/pipeline/onboarding/stage_order.html)stagesrZ   )rB   rO   rP   rN   jsonloadsrE   	enumerater   r   rR   r   rt   r   	Exceptionr   strorder_byr   )	rX   pkrZ   r   indexr   r~   er   s	            r\   update_stage_orderr      s%    %%))R)0K~~
	TJJw||//>?E#,U#3 x#4488H8E!&

 W&EF9 566
 ))22:>F2&	
   	TNN7$?@7s1v FsSS	Ts   BC7 7	D9 .D4.D94D9z!onboarding.delete_onboardingstagec                    	 t         j                  j                  |      j                          t	        j
                  | t        d             t        | j                  j                  dd            S # t         j                  $ r" t	        j                  | t        d             Y Yt        $ r" t	        j                  | t        d             Y w xY w)z
    function used to delete onboarding stage.

    Parameters:
    request (HttpRequest): The HTTP request object.
    stage_id : stage id

    Returns:
    GET : return onboarding view
    rF   z!The stage deleted successfully...zStage not found.z%There are candidates in this stage...HTTP_REFERER/)r;   rO   rP   deleter   rt   ru   DoesNotExistr   r   r   META)rX   r   s     r\   stage_deleter      s    L##x#0779!$G"HI   0 0 EFF	 '' 7w"4 56 Lw"I JKLs   AA4 42C('CCzonboarding.add_onboardingtaskc                    | j                   j                  d      }t        j                  j                  |      }t	        d|i      }| j
                  dk(  rzt	        | j                  d|i      }|j                         rP|j                  d   }|j                  d   }|j                  d   }|j                  d   }t        ||      }|j                          |j                  j                  |       |j                  j                  |       |r%|D ]   }	t        |	||	      }
|
j                          " |j                  j                         D cg c]  }|j                    }}t#        j$                  | j&                  j(                  |d
dddddt+        d      	       t-        j.                  | t1        d             t3        dddi      S t5        | d||d      S c c}w )z
    function used to create onboarding task.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return onboarding task creation form template
    POST : return onboarding view
    r   rF   initialrE   
candidatesmanagers
task_title)r   r   candidate_idr   onboarding_task_id,You are chosen as an onboarding task manager>   لقد تم اختيارك كمدير مهام التدريب.6   Sie wurden als Onboarding-Aufgabenmanager ausgewählt.D   Ha sido seleccionado/a como responsable de tareas de incorporación.M   Vous avez été choisi(e) en tant que responsable des tâches d'intégration.rg   rh   ri   z New task created successfully...   
HX-Refreshtruer   headerszonboarding/task_form.html)rM   r   )GETrP   r;   rO   r6   rN   rE   rQ   cleaned_datar<   rR   rH   rS   r   r9   rv   rw   r+   rx   ry   rz   r   r   rt   ru   r   r   )rX   r   r~   rM   	form_datar   r   titleonboarding_taskcandtaskmanagerr   s                r\   task_creationr     s    {{z*H##''8'4E!:u*=>D~~*7<<*eATU	"//=J --j9H --j9H**<8E,QO  "''++H5&&**:6&  D(%)!)+:D
 IIK   /::>>@ ((E  KK))CXP^g$ !23
 Wa(J&KLs\64JKK,t.R #s   G$z onboarding.change_onboardingtaskc                    t         j                  j                  |      }t        |      }| j                  dk(  rt        | j
                  |      }|j                         rc|j                         }|j                  j                  t        j                  j                  |j                  j                  d                   |j                  j                         D ]J  }|j                   |j"                  j                         vr|j%                          :|j&                  |_        L t)        j*                  | t-        d             |j                  j                         D cg c]  }|j.                   }}t1        j2                  | j4                  j6                  |ddd	d
ddt9        d      	       t;        dddi      S t=        | d||d      S c c}w )z
    function used to update onboarding task.

    Parameters:
    request (HttpRequest): The HTTP request object.
    task_id : task id

    Returns:
    GET : return onboarding task update form template
    POST : return onboarding view
    rF   r   rE   rH   rI   zTask updated successfully..r   r   r   r   r   rg   rh   ri   r   r   r   r   zonboarding/task_update.html)rM   task_id)r<   rO   rP   r4   rN   rE   rQ   rR   rH   rS   r!   rT   rU   rV   candidatetask_setrv   r   r   r   r   r   rt   ru   rw   r+   rx   ry   rz   r   r   r   )rX   r   r   rM   r   	cand_taskr   r   s           r\   task_updater   C  s   $ %,,00G0<O7D~~!',,I==?99;D    ''tyy/@/@/O'P ->>BBD 7	))1D1D1FF$$&)-I&	7
 Wa(E&FG?C?O?O?S?S?UV8X..VEVKK))CXP^g$ !23
  s\64JKK%	
  Ws   )Gz onboarding.delete_onboardingtaskc                    	 t         j                  j                  |      j                          t	        j
                  | t        d             t        t              S # t         j                  $ r0 t	        j                  | t        d             Y t        t              S t        $ r0 t	        j                  | t        d             Y t        t              S w xY w)z
    function used to delete onboarding task.

    Parameters:
    request (HttpRequest): The HTTP request object.
    task_id : task id


    Returns:
    GET : return onboarding view
    rF   z The task deleted successfully...zTask not found.zKYou cannot delete this task because some candidates are associated with it.)r<   rO   rP   r   r   rt   ru   r   r   r   r   onboarding_view)rX   r   s     r\   task_deleter   {  s    
""g".557!$F"GH O$$ && 6w"3 45 O$$  
]	
 O$$
s   AA 2C 'CCzrecruitment.add_candidatec                 \   t               }| j                  dk(  rt        | j                  | j                        }|j	                         rU|j                         }d|_        |j                          t        j                  | t        d             t        t              S t        | dd|i      S )z
    function used to create hired candidates .

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return candidate creation form template
    POST : return candidate view
    rE   Tz$New candidate created successfully..z"onboarding/candidate_creation.htmlrM   )r3   rN   rE   FILESrQ   rR   hiredr   rt   ru   r   candidates_viewr   )rX   rM   	candidates      r\   candidate_creationr     s     #$D~~&w||W]]C==?		I"IONNWa(N&OPO,,'?&$PPr^   zrecruitment.change_candidatec                 v   t         j                  j                  |      }t        |      }| j                  dk(  rpt        | j
                  | j                  |      }|j                         r>|j                          t        j                  | t        d             t        t              S t        | dd|i      S )z
    function used to update hired candidates .

    Parameters:
    request (HttpRequest): The HTTP request object.
    obj_id : recruitment id

    Returns:
    GET : return candidate update form template
    POST : return candidate view
    rF   r   rE   z*Candidate detail is updated successfully..z onboarding/candidate_update.htmlrM   )rA   rO   rP   r3   rN   rE   r   rQ   rR   r   rt   ru   r   r   r   )rX   rY   r   rM   s       r\   candidate_updater     s     !!%%%0I"I6D~~&w||W]]YW==?IIKWa(T&UVO,,'=~NNr^   z%onboarding.delete_onboardingcandidatec           	      h   	 t         j                  j                  |      j                          t	        j
                  | t        d             t%        t'        d            S # t         j                  $ r" t	        j                  | t        d             Y Ht        $ r}t               }|j                  D ]0  }|j                  t        |j                  j                               2 dj!                  |      }t	        j                  | t        dj#                  |                   Y d}~d}~ww xY w)z
    function used to delete hired candidates .

    Parameters:
    request (HttpRequest): The HTTP request object.
    obj_id : candidate id

    Returns:
    GET : return candidate view
    rF   z Candidate deleted successfully..Candidate not found., zEYou cannot delete this candidate. The candidate is included in the {}Nzcandidates-view)rA   rO   rP   r   r   rt   ru   r   r   r   rS   protected_objectsadd___metaverbose_namejoinformatr   r   )rX   rY   r   models_verbose_name_setsobjmodels_verbose_name_strs         r\   candidate_deleter     s    
(//1!$F"GH  G-.// !! ;w"8 9: 
#&5 && 	EC$((CII,B,B)CD	E#'++.F"GW^^+	
 	

s   AA# #2D1D1BD,,D1zonboarding.view_candidatestagec                    t         j                  j                  |      }t        j                  j	                  |      j                         s	 t        j                  j	                  |j                        j                  d      d   }t        ||      j                          t        j                  j	                  |j                        x}rR|D ]M  }t        j                  j	                  ||	      j                         r3t        ||	      j                          O |j                  }t        j                   }|||d
d}	| j"                  j                  d      }
|
r3t%        j&                  |
      }t)        ||      \  }}|
|	d<   ||	d<   ||	d<   t+        | d|	      S # t        $ r2 t        j                  | t        d      d|j                  iz         Y 8w xY w)zA
    Candidate individual view for the onboarding candidates
    rF   r   )rs   r   r   )r   onboarding_stage_idz%(recruitment)s has no stage..rZ   r   r   T)rZ   choicesr   single_viewrequests_idspreviousnextzonboarding/single_view.html)rA   rO   rP   r8   rT   existsr;   rs   r   rR   r   r   r   ru   r<   r9   choicer   r   r   r   r   )rX   rG   kwargsr   r   tasksr   rZ   r   contextrequests_ids_jsonr   previous_idnext_ids                 r\   candidates_single_viewr     s    !!%%%,I!!((i(@GGI	.66==(77  >  hz"1 & &<Ldf #**11$33 2 
 
5 
  $,,33!*t 4 &( "%.4df **K""G"	G  7zz"34.|R@W"3)
!% C  	NN23 )":":;<	s   AF% %7G G c                 P    t        | t                     }|j                  |      } | S )z-
    function used to paginate query set
    )r   r   get_page)qrysetpage_number	paginators      r\   paginator_qryr   %  s(     &."23I,FMr^   z#onboarding.view_onboardingcandidate)permc                    t         j                  j                  ddd      }t        | j                  |      }| j                  j                         }| j                  j                  d      }t        |j                  |      }t        j                  j                         }t        |      }t        t         |       t        | d||j                  |t        j                   |||d      S )z
    function used to view hired candidates .

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return candidate view  template
    TF	is_activer   recruitment_id__closedpagezonboarding/candidates_view.html)r   rM   pd	gp_fieldsmail_templateshired_candidatesfilter_dict)rA   rO   rT   r=   r   	urlencoderP   r   qsr   rv   r   r   r   rM   r>   fields)rX   querysetcandidate_filter_objprevious_datar   page_objr   	data_dicts           r\   r   r   .  s       ''$ ( H
 +7;;AKK))+M++//&)K144kBH(00446N'Ii+)"(--)00, ($	
 r^   zrecruitment.view_candidatec           
      z   | j                   j                         }t        j                  j	                  dd      }| j                   j                  d      |j	                  d      }t        | j                   |      j                  }t        | dt        || j                   j                  d            |d	      S )
NTF)r   r   r   r   r  zcandidate/candidate_card.htmlr   )rU   r   )
r   r   rA   rO   rT   rP   r=   r  r   r   )rX   r  r   s      r\   hired_candidate_viewr  U  s     KK))+M""))$ * J {{{#+&&&6
 zBEEJ'!*gkkoof.EF	
 r^   c                    t         j                  j                  ddd      }t        | j                  |      j
                  }| j                  j                         }| j                  j                  d      }t        |      }t        t         |       t        | |d      }| j                  j                  d      }d}|dk7  r+|)d	}t        ||| j                  j                  d      d      }t        ||      }t        | ||||d
      S )z
    function used to filter hired candidates .

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return candidate view template
    TFr   r   orderbyfieldzonboarding/candidates.html zonboarding/group_by.html)r   r   r   )rA   rO   rT   r=   r   r  r   rP   r   r   r   general_group_byr   r   )	rX   r  r   r  r   r  r  r   r  s	            r\   candidate_filterr  j  s       ''$ ( H
 !h7::JKK))+M++//&)K'Ii+Y7JKKOOG$E+H{u(-%w{{v6

 Z5H}YO r^   zrecruitment.view_recruitmentc                    | j                         }| j                         rdnd}| j                  j                  d      }| j                  j                  d      }| j                  j                  d      }t               }|s!t        j                  | d       t        d      S t        t        j                  j                  |      j                  d	d
            }g }|D ]H  }	|j                  |	j                  |	j!                         |	j"                  f       |	j%                          J |D ]  }
t        t'        |      t'        g       z        }t(        j                  j+                  |
      }| j,                  j+                  d      s|j.                  r#t        j                  | t1        | d             |D ]  }t3        j4                  |      }t3        j6                  || j8                  j:                  d      }|j=                  |      }|j                  dt?        |i dd      j@                  df        tC        jD                  d      }tF        j                  j                  |      }|jI                         r=|jK                         }||_&        d|_'        d|_(        d|_)        |jU                          ntG        ||      jU                          tW        d| d| d| |||d|       }tY        d|j                   d||jZ                  g       }d!|_.        ||_/        	 |ja                          t        jb                  | d"       d
|_5        |jU                          	 tm               }|jn                  jp                  jK                         |_9        ||_:        |jU                          t        jb                  | d$        t        d      S # td        $ rB}tg        jh                  |       t        jh                  | d#|j                          Y d}~d}~ww xY w# td        $ r }tg        jh                  |       Y d}~d}~ww xY w)%z
    function used to send onboarding portal for hired candidates .

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return json response
    httpshttpidsother_attachmentstemplate_attachment_idszPlease choose candidates)<script>window.location.reload()</script>rI   bodyTflatrF   	no_portalz( has already been converted to employee.)r   selfr*   F)pathr   zapplication/pdf   r   r   N)r   tokenz&onboarding/mail_templates/default.htmlz://z/onboarding/user-creation/)portalr   hostprotocolrX   zHello z$, Congratulations on your selection!)subjectr  tohtmlz!Portal link sent to the candidatezMail not send to z#Candidate Added to Onboarding Stage);get_host	is_securerE   rV   r   r   r   infor   listr   rO   rT   values_listappendnamereadcontent_typecloserS   rA   rP   r   converted_employee_idru   r   TemplateContextry   rz   r   r   r{   secrets	token_hexr:   r   firstr   usedcountprofilerR   r   r	   emailcontent_subtypeattachmentsrx   rt   r   r&   r   start_onboardr8   rs   r   r   r   )rX   r"  r#  r   r  r  email_backendbodysattachments_otherfilecand_idr=  r   r'  template_bdyr   
render_bdyr   existing_portal
new_portalhtml_messager;  r   onboarding_candidates                           r\   
email_sendrJ    s    D!++-w6H%%e,J--.AB%ll223LM*,Mg9:GHH##**2I*JVV 	W 	
E !   $))TYY[$:K:K!LM

  G301CG;<%%))W)5	{{{+..Q),TUV  '006"**!*GLL4M4MN *009
"""$&j!')  %%b)E.66==9=UO%%',224
#(
 "'
#$
 %)
"! iuEJJL+8!)
#dV3MeWU )  (	  	L !  00TU!OO$E
 %+E! +EN

  *MN '+I#NN		#1#3 ((99??A !4 1: - %%'W&KLKGR CDD!  NQw*;INN;K(LMMN  	LLOO	s1   /&O-A P)	P&$8P!!P&)	Q2QQc           	         g }|D ]  }g }t        | j                  |j                  j                               j                  j                  d      }g }|g d}|D ]   }|j                  |g d       t        | j                  |j                  j                  d            j                  j                  d      }	d|j                  z   t        |j                        z   }
t        |	d| j                  j                  |
      |
      j                  }|d	   |z   |d	<   ||j                  j                         D cg c]  }|j                   j                   c}z   } g }|d	   }|D ]>  }d
}|D ]  }|d   |k(  s|j                  |       d} n |r,|j                  d|i       @ |||d}|j                  |        |S c c}w )zE
    This method is used to make group of the onboarding records
    r
  r   )rZ   r   )grouperr+  T)candidate_id__is_activer   r   r   FrL  )rZ   r   employee_ids)r0   r   r   rv   r  r   r-  r/   r   rT   stage_titler   rG   r)   rP   object_listr   )rX   r  groupsrec	employeesr   all_stages_grouperrU   r~   stage_candidates	page_namerL  r   ordered_datagroupersfounds                   r\   onboarding_query_grouperrZ    s    F ,	&KK#"6"6":":"<

"XXj! 	  "b1 	E%%%&DE8&&,0 '  
 b*%  !2!22S[@I' %	*	
 k  "(^g5DN!9>9L9L9N%-5%%((% I#	( > 	8EE# 9%. ''0 E	
 ##Y$67	8 "%

 	dY,Z M+%s   ;G
onboarding.view_onboardingstagec                 V   t        | j                        }|j                  }| j                  j	                  d      sP|j                  d| j                  j                  g      |j                  | j                  j                  g      z  }| j                  j                  j                  j                         }|D ]e  }|j                  s|j                  j                  |vs)||j                  j                  |j                  j                  j                        z  }g |j                  d      j                         }| j                  j                  d      }|s|j                  d	      }t        j                  j                         }t         j"                  }| j                  j%                         }t'        |j)                  d
      d      }	| j                  j                  d      }
|	j+                  |
      }t-        | |      }|D ](  }t/        |d   d|d          t/        |d   d|d          * t1        | j                  j%                               }|j3                         j5                         D ]  \  }}|d   dk(  s|dk(  s||=  t7        | d|||||||d      S )z
    function used to view onboarding main view.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return onboarding view template
    r[  Tr   recruitment_managers__in!onboarding_stage__employee_id__inrF   r	  closedFra  rG      r   rZ   r   rN  r   unknownviewzonboarding/onboarding_view.html)recruitmentsrec_filter_objonboarding_stagesr   r   r   r   )r?   r   r  ry   has_permrT   rz   r   rv   r   rs   rG   distinctrP   r;   rO   r9   r   r   r   r   r   rZ  setattrr   copyitemsr   )rX   
filter_objrf  employee_tasksr   r   rh  r   r  r   r   r  rQ  itemr   keyvals                    r\   r   r   2  sw    #7;;/J==L<<  !BC#**gll6O6O5P + 
/6||/H/H.I   


 \\..>>BBDN ==T]]99M'*--*>*>==//22 +? + L
  &&&6??AL[[__X&F#**%*8'//335""GKK))+M,//5q9I++//&)K!!+.H%gx8F K]#XtH~>]#^T.5IJK 7;;0023K$$&,,. !Sq6Y#-C ! )$(!2&	
 r^   c                 Z   t        | j                        }|j                  }| j                  j	                  d      sP|j                  d| j                  j                  g      |j                  | j                  j                  g      z  }| j                  j                  j                  j                         }|D ]e  }|j                  s|j                  j                  |vs)||j                  j                  |j                  j                  j                        z  }g |j                  d      j                         }| j                  j                  d      }|s|j                  d	      }t        j                  j                         }t         j"                  }t%               }| j                  j'                         }	t        | j                  |
      }t)        |d      }
| j                  j                  d      }|
j+                  |      }t-        | |      }|D ]  }t/        |d   d|d           t1        | j                  j'                               }|j3                         j5                         D ]  \  }}|d   dk(  s|dk(  s||=  t7        | d|||||||||	dd
      S )Nr[  Tr]  r_  rF   r	  ra  Frb  r
  rc  r   rZ   r   r   rd  re  zonboarding/kanban/kanban.html)
rf  rg  rh  r   r   
stage_formr   r   r   card)r?   r   r  ry   ri  rT   rz   r   rv   r   rs   rG   rj  rP   r;   rO   r9   r   r5   r   r   r   rZ  rk  r   rl  rm  r   )rX   rn  rf  ro  r   r   rh  r   rt  r  r   r   r  rQ  rp  r   rq  rr  s                     r\   kanban_viewrv  o  ss    #7;;/J==L<<  !BC#**gll6O6O5P + 
/6||/H/H.I   


 \\..>>BBDN ==T]]99M'*--*>*>==//22 +? + L
  &&&6??AL[[__X&F#**%*8'//335""G(*JKK))+M"7;;FJ,*I++//&)K!!+.H%gx8F ?]#XtH~>?7;;0023K$$&,,. !Sq6Y#-C ! '$(!2&$	
 r^   c                    	 t         j                  j                  |      }|r|j                  du rt	        | d      S |j
                  dk(  rt        d|      S |j                  }t        j                  j                  |j                        j                         }t        |      }	 | j                  dk(  r5t        | j                  |      }|j                         rt!        ||| |      S t	        | d
||j                  j*                  j,                  d      S # t"        $ r" t%        j&                  | t)        d	             Y Xw xY w# t"        $ r}t/        |      cY d}~S d}~ww xY w)a  
    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
    r   T404.html   employee-bank-detailsusernamer   rE   z#User with email-id already exists..zonboarding/user_creation.htmlrM   companyN)r:   rO   rP   r8  r   r9  r   r   r   rT   r;  r7  r7   rN   rE   rQ   	user_saver   r   r   ru   rs   
company_idr   )rX   r   onboarding_portalr   ry   rM   r   s          r\   user_creationr    sF   #,4488u8E $5$:$:d$B':..""a'3U;;%22	||""IOO"<BBD.	N~~''tD==?$T+<guMM +,99HHSS
 	
  	NNN7A&K$LM	N  #E""#sN   ;E
 E
 AE
 *AD .-E
 (EE
 EE
 
	E(
E#E(#E(c                    | j                  d      }|j                  j                  |_        |j                  j
                  }|t        |<   d|_        |j                          t        j                  |t        d             t        d|      S )z
    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
    Fr`   r   zAccount created successfully..zprofile-view)rR   r   r;  r}  sessionsession_keyportal_userr9  r   rt   ru   r   )rM   r  rX   r   ry   r  s         r\   r  r    sx     99E9"D%2288DM//--K#KWa @ABNE**r^   c           	         t         j                  j                  |      j                         }|t	        | d      S |j
                  }| j                  dk(  ra| j                  j                  d      }|D||_	        ||_	        d|_
        |j                          t        j                  | t        d             t	        | d||j                  ||j                  j                   d      S )	a  
    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
    rx  ry  rE   r:     z&Profile picture updated successfully..zonboarding/profile_view.html)r   r:  r   r  )r:   rO   rT   r7  r   r   rN   r   rP   r:  r9  rR   r   rt   ru   rs   r  )rX   r   r  r   r:  s        r\   profile_viewr    s     )0077e7DJJL gz**!..I~~--##I. 'I(/%&'#""$Wa(P&QR&"(00 //::		
	 	r^   c                    t         j                  j                  |      j                         }|t	        | d      S |j
                  }|j                  |j                  |j                  |j                  d}| j                  j                  }t        |   }t        j                  j                  |      j                         r*t        j                   | t#        d             t%        d      S t        j                  j                  |      j                         t        j                  j                  |      j                         }|j&                  r*t        j                   | t#        d             t%        d      S t        j                  j                  |      j                         j(                  }t+        |	      }| j,                  d
k(  r[t        j                  j                  |      j                         }	t+        | j.                  |	      }|j1                         r|j3                          t5        | |       |j3                  d      }
||
_        |j8                  |
_        |j:                  rrt<        j>                  jA                  |j:                  j                        }|
jB                  j3                  |tE        |j:                  jG                               d       d|
_$        |
j3                          tJ        j                  jM                  |
|jN                  jP                  |jN                  |jR                  jT                  |jV                  |j8                  d       tX        j                  j[                  |j\                  j_                         D cg c]:  }tY        |j`                  |
|jb                  |jd                  |jf                        < c}       d|_4        |j3                          t        j                   | t#        d             t%        d|      S t	        | d||jR                  jT                  d      S c c}w )a#  
    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.
    rx  ry  )employee_first_namephoneaddressdob)r;  z&Employee with email id already exists.r   rw   zEmployee already exists..r   rE   r   Fr`   )rR   T)department_idjob_position_idr  date_joiningr;  )rH   defaults)r   rH   documentr   reject_reasonrz  z0Employee personal details created successfully..r{  z!onboarding/employee_creation.html)rM   r   )5r:   rO   rT   r7  r   r   r.  mobiler  r  r  r  r  r!   r   r   rt   ru   r   employee_bank_details__dict__r2   rN   rE   rQ   rR   r   rw   r;  r:  osr  basenameemployee_profiler   r/  is_from_onboardingr#   update_or_creater  r  rs   r  joining_dater*   bulk_createcandidatedocument_setrv   r   r  r   r  r9  )rX   r   r  r   r   r  ry   r   rM   r   employee_personal_infofilenamedocs                r\   employee_creationr    s    )0077e7DJJL gz**!..I(~~!!$$}}	G //--K{#DT*113!$L"MN  5;;=I##**D*AGGI))Wa(C&DEG$$""))4)@FFHQQD ~~##**D*AGGI#LL
 ==?IIK'4 %)YYeY%<"6:"3+4??"(  77++I,=,=,B,BC&77<<k)*;*;*@*@*BC% =  9="5"'')#++<<2%.%>%>%L%L'0'@'@"+":":"E"E$-$:$:&__ = 	 ((  )>>BBD	  !ii$:!$"zz&)&7&7	 '(#""$MN 3U;;+9#;#;#F#FG %	s   (?Qc                    t         j                  j                  |      }t        j                  j	                  |j
                  j                        j                         }t        j                  j	                  |      j                         }t        j                  j	                  |      j                         }t        |      }| j                  dk(  rCt        | j                  |      }|j                         rt        || |      S t        t               S t#        | d||j
                  j$                  j&                  d      S )	a/  
    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
    rx  r|  r  )rH   r   rE   z%onboarding/employee_bank_details.htmlr~  )r:   rO   rP   r   rT   r   r;  r7  r!   r"   r1   rN   rE   rQ   employee_bank_details_saver   welcome_aboardr   rs   r  )rX   r   r  ry   r   	bank_inforM   s          r\   r  r  t  s    )004454A<<(9(F(F(L(LMSSUD&&&=CCEH#++22x2HNNPI"I6D~~&LL
 ==?-dG=NOO''/(55DDOO	
 r^   c                    | j                  d      }t        j                  j                  |j                        }||_        |j                  }||_        |j                          |j                          d|_        d|_	        |j                          t        j                  |t        d             t        t              S )z
    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
    Fr`   r  rc  Tz,Employee bank details created successfully..)rR   r!   rO   rP   ry   rH   r   r2  r9  r8  r   rt   ru   r   r  )rM   rX   r  employee_bank_detailr   r   s         r\   r  r    s      99E92##W\\#BH'/$!..I&.I#NN!Wa NOPN##r^   c                     t        | d      S )z
    function used to view welcome aboard.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return welcome onboard view
    zonboarding/welcome_aboard.html)r   r$  s    r\   r  r    s     ';<<r^   rE   zonboarding.change_candidatetaskc                    | j                   j                  d      }| j                   j                  d      r!t        j                  j                  |      }n| j                   j                  d      }t        j                  j                  |      }t
        j                  j                  |      }t        j                  j                  ||      j                         }||_        |j                          |j                  j                  j                         D cg c]  }|j                   }}t        j                  | j                   j"                  |d|j                   d|j$                   d|j                   d	d
|j                   d|j$                   d|j                   d	d|j                   d|j$                   d|j                   dd|j                   d|j$                   d|j                   d	d|j                   d|j$                   d|j                   d	dt'        d      	       t)        t+        d      dd      S c c}w )z
    function used to update candidate task.

    Parameters:
    request (HttpRequest): The HTTP request object.
    obj_id : candidate task id

    Returns:
    POST : return candidate task template
    r   r   rF   candIdr   z	The task z of            z was updated to .u   تم تحديث المهمة u    للمرشح     إلى zDie Aufgabe z des Kandidaten  wurde auf  aktualisiert.z	La tarea z del candidato  se ha actualizado a u
   La tâche z du candidat     a été mise à jour à rg   rh   ri   z!Candidate onboarding task updatedrt   r   type)rE   rP   r9   rO   r<   rA   rT   r7  r   rR   r   rH   rv   rw   r+   rx   ry   rz   r   r   r   ru   )	rX   taskIdr   candidate_taskcanIdr   r   r   r   s	            r\   candidate_task_updater    s    \\h'F||&&..22f2=  *(00444?%%))U)3	&..55" 6 

%' 	 #N '99EEIIK 	!!E  KK!!::; <(())9.:O:O9PPQS/0Q0Q/RR`aoa|a|`}  ~F  GU  G\  G\  F]  ]^  _~@@AAQR`RmRmQnny  {I  {P  {P  zQ  Q_  `N==>onNiNiMjj  AO  AV  AV  @W  WX  Y^>>?}^MhMhLi  jC  DR  DY  DY  CZ  Z[  \*+ 9:IN !s   Ic           
         | j                   j                  d      }| j                   j                  d      }t        j                  j                  |      }t        j                  j                  |      }t
        j                  j                  |      }t        j                  j                  ||      j                         }|j                  }t        | d|||dt        j                  d      S )z
    htmx function that return the status of candidate task

    Parameters:
    request (HttpRequest): The HTTP request object.
    task_id : Onboarding task id

    Returns:
    POST : return candidate task template
    rC  
cand_stagerF   r   onboarding/candidate_task.htmlTr   r   r   second_loadr   )r   rP   r8   rO   r<   rA   r9   rT   r7  r   r   r   )	rX   r   rC  r  cand_stage_objr   r   r  r   s	            r\   
get_statusr    s     kkooi(G.J#++//:/>N$,,00G0<O!!%%%1I"**11? 2 eg  ""F(#'$++	

 
r^   c           
         | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }t        j                  j                  |      }t        j                  j                  |      }t
        j                  j                  |      }t        j                  j                  |      }t        j                  j                  |||      \  }	}
|	j                          |j                  j                  |       t        | d|	j                  ||dt        j                  d      S )	z
    htmx function that used to assign a onboarding task to candidate

    Parameters:
    request (HttpRequest): The HTTP request object.
    task_id : Onboarding task id

    Returns:
    POST : return candidate task template
    r   rC  r  rF   r   r  Tr  )r   rP   r8   rO   r<   rA   r;   r9   get_or_createrR   r   r   r   r   r   )rX   r   r   rC  r  r  r   r   r   r   createds              r\   assign_taskr    s    {{z*Hkkooi(G.J#++//:/>N$,,00G0<O!!%%%1I&..22h2?&..<<!* = Iw
 NN""9-(&&#'$++	

 
r^   z onboarding.change_candidatestagec                    | j                   j                  d      }t        j                  j	                  |      }t
        j                  j                  |      }t        j                  j                  |      }t        j                  j                  |      }||_        |j                          t
        j                  j                         }t        j                  }	|j                  j                  j                         D 
cg c]  }
|
j                   }}
| j                   j                  d      t        j                   | j"                  j$                  |d|j&                   d|j                   dd|j&                   d	|j                   dd
|j&                   d|j                   dd|j&                   d|j                   dd|j&                   d|j                   ddt)        d      	       t+        | |      }|D ]-  }t-        |d   d|d          t/        | d|d   d   ||	d      c S  t1        t3        d      dd      S c c}
w )z
    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
    r~   rF   r   is_ajaxzThe stage of z                  was updated to r  u(   تم تحديث مرحلة المرشح r  zDie Phase des Kandidaten r  r  zLa etapa del candidato r  u   L'étape du candidat r  rg   rh   ri   rZ   r    onboarding/onboarding_table.htmlr   rZ   rh  r   "Candidate onboarding stage updatedrt   r  )rE   rP   rB   rO   rT   r;   rA   r8   r   rR   rv   r9   r   rH   rw   r+   rx   ry   rz   r   r   rZ  rk  r   r   ru   )rX   r   rs   r   rf  r~   r   candidate_stagerh  r   r   r   rQ  rp  s                 r\   candidate_stage_updater  9  s    ||(H&&---@L##''8'4E!!%%%6I$,,00i0HO*/O''//335""G (;;GGKKM 	!!E  ||	"*LL%% !=!= > ?  / C CDAG>?[?[>\\det  fI  fI  eJ  JK  L/0L0L/M[YhY|Y|X}  ~L  M-o.J.J-KK`ap  bE  bE  aF  FG  H+O,H,H+IIbcr  dG  dG  cH  HI  J ./	
 &g|<F 

]#XtH~>.%ay7%6"
 	


 :;YO ;s   Ic                 ~   | j                   d   }| j                   d   }t        j                  |      }| j                   d   }t        j                  j                         }t        j                  j                  t        |            }t        j                  }t        j                  j                  |      j                  |       d}d}	|rd	}d
}	t        | |      }
|
D ]  }t        |d   d|d           t        | d|
d   d   ||d      }t!        |j"                  j%                  d      d| d|	 dz         S )Nr  rZ   r~   rF   )candidate_id__id__in)r   r*  zNo candidates selectedrt   z$Candidate stage updated successfullyr   r  r   r  rq   zW<div><div class="oh-alert-container"><div class="oh-alert oh-alert--animated oh-alert--z">z</div> </div></div>)rE   r   r   r;   rO   rv   rB   rT   intr9   r   r8   updaterZ  rk  r   r   r{   r|   )rX   candiate_idsrecrutment_idcandidate_id_listr~   rh  rf  r   r  r   rQ  rp  r   s                r\   candidate_stage_bulk_updater  s  s_    <<&LLL/M

<0LL!E'//335&&--]1C-DL""G!!7H!IPP! Q  D&G8%g|<F ?]#XtH~>?*!!9]3!2	
H (cdhciiklskt  uH  I	I r^   c                    | j                   d   }t        j                  |      }| j                   d   }| j                   d   }t        j                  j                  ||      j                  |      }t        t        d      dd      S )	Nr  r   r   )r  r   r   r  rt   r  )	rE   r   r   r9   rO   rT   r  r   ru   )rX   r  r  r   r   r9  s         r\   candidate_task_bulk_updater    s     <<&L

<0<<D\\(#F!!((.4 ) fFf 

 :;YO r^   c           
      2   g }g }g }g }t         j                  j                  dd      }|D ]  }t        j                  dd      }t        j                  dd      }t        j                  dd      }	|j                  d| d| d|	 d       |j                  d	| d| d|	 d
       |j                  |j                         |j                  |j                  j                  d      j                                 t        ||||t        d      dd      S )z
    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.
    FT)ra  r   r      rgba(r   z, 0.2rgb()r>  z#No records available at the moment.)labelsrU   background_colorborder_colorr   safe)rB   rO   rT   randomrandintr-  r   r   r9  r   ru   )
rX   r  rU   r  r  rf  rZ   redgreenblues
             r\   onboard_candidate_chartr    s$    FDL&&--Ud-KL# NnnQ$q#&~~a%%uBugRvU CDd3%r%4&:;k''(K))00t0DJJLMN  0(>?	
 	 	r^   zcandidate.change_candidatec                    | j                   j                  d      }| j                   j                  d      }|s.t        j                  | t	        d             t        ddid      S |.t        j                  | t	        d	             t        ddid      S |d
k(  rd}t        j                  |      }|s.t        j                  | t	        d             t        ddid      S ||_        |j                          t        j                  | t	        d      j                  |j                               t        ddi      S )z9
    Ajax method to update joining date of candidate
    r  dateMissing candidate ID.r  dangerr   r   NzMissing date of joining.r  Candidate not foundz2{candidate}'s Date of joining updated successfully)r   rt   )rE   rP   r   r   ru   r   rA   findr  rR   rt   r   r.  )rX   rC  
date_valuecandidate_objs       r\   update_joiningr    s    llx(G!!&)Jw"9 :;VX.s;;w"< =>VX.s;;R
NN7+Mw"7 89VX.s;;!+M	
>?FF#(( 	G 	
 +,,r^   c           	         t         j                  j                         j                  dd      }t        j                  j                         }|j                  d      }t        j                  j                  d      }|j                  dd      }t        |      |||t        t        |            d}t        | d|      S )	Nr   Tr  r  job_position_id__job_position)rZ   r   r   onboard_candidatesjob_positionszonboarding/dashboard.html)r   )	rB   rO   rv   r,  rA   rT   r+  rS   r   )rX   rZ   r   r   r  r  r   s          r\   view_dashboardr    s     %%))+77d7KK""&&(JD1E"**111E&22'd 3 M
 K( 0c-01G '6HHr^   c           
      t   | j                   j                  d      }t        j                  j	                  |      j                  dd      }t        |      }g }g }g }|D ]  }t        j                  dd      }t        j                  dd      }t        j                  dd      }	|j                  d| d	| d	|	 d
       |j                  d| d	| d	|	 d       t        j                  j	                  ||      j                         }
|j                  |
        |||||t        d      d}t        |      S )NrZ   )recruitment_id__titlerO  Tr  r   r  r  r   z, 0.3r  r  ) onboarding_stage_id__stage_title*onboarding_stage_id__recruitment_id__titlez$No candidates started onboarding....)r  rU   rZ   r  r  r   )r   rP   r;   rO   rT   r,  r+  r  r  r-  r8   r9  ru   r   )rX   rZ   r  candidate_countsr  r  labelr  r  r  r9  r   s               r\   dashboard_stage_chartr    sQ    ++//-0K$$++) , k-dk+  &\FL 
'nnQ$q#&~~a%%uBugRvU CDd3%r%4&:;&&---27B . 
 %' 	 	&
'  ",$;<H !!r^   c                 X   t        j                  | j                  d         }d}|j                         D ]N  \  }}t        j
                  j                  |      }|j                  |k7  s6||_        |j                          d}P |rt        t        d      dd      S t        dd	i      S )
zA
    This method is used to update the sequence of candidate
    sequenceDataFrF   TzCandidate sequence updatedr*  r  r  fail)r   r   rE   rm  r8   rO   rP   r   rR   r   ru   )rX   sequence_dataupdatedrC  seqr   s         r\   candidate_sequence_updater  /  s     JJw||N;<MG%++- %%))W)5==CDMIIKG 67H
 	
 ())r^   zrecruitment.change_stagec                 X   t        j                  | j                  d         }d}|j                         D ]N  \  }}t        j
                  j                  |      }|j                  |k7  s6||_        |j                          d}P |rt        dt        d      d      S t        dd	i      S )
zB
    This method is used to update the sequence of the stages
    r  FrF   Trt   zStage sequence updated)r  r   r  r  )r   r   rE   rm  r;   rO   rP   r   rR   r   ru   )rX   r   r  r   r  r~   s         r\   stage_sequence_updater  D  s     JJw||N;<MG&,,. #''++x+8>>S  ENJJLG Y1=U;VWXX())r^   c                     t         j                  j                  |      }| j                  d   |_        |j                          t        d      }t        d| d      S )zE
    This method is used to update the name of recruitment stage
    rF   r~   z-The stage title has been updated successfullyz[<div class="oh-alert-container"><div class="oh-alert oh-alert--animated oh-alert--success">z</div></div>)r;   rO   rP   rE   rO  rR   ru   r   )rX   r   r[   r   s       r\   stage_name_updater  Y  s_      ''++x+8I#LL1INN?@G
efmennz{ r^   c                 ,   t         j                  j                  |      }|j                  }t	        | dd|i      }t               }|j                  }| rI	 | j                  j                  j                          d| j                  j                  j                   d}| j                  dk(  r| j                  d   }| j                  d   }t        j                   t              5  t#        ||||gd	
      }	|	dk(  r t%        j&                  | t)        d             nt%        j                  | t)        d             ddd       t+        |j,                  j/                  d      dz         S |S #  t        j                  t               Y xY w# 1 sw Y   RxY w)zP
    This method is used to send mail to the candidate from onboarding view
    rF   zonboarding/send_mail_form.htmlr   z <>rE   r%  r  F)fail_silentlyr   zMail sent successfullyzSomething went wrongNrq   rr   )rA   rO   rP   r;  r   r   $dynamic_from_email_with_display_namery   rz   get_full_namer&   r   r   rN   rE   
contextlibsuppressr
   r   rt   ru   r   r{   r|   )
rX   r   r   candidate_mailr   r?  display_email_namer%  r  ress
             r\   onboarding_send_mailr  i  sz    !!%%%6I__N1K3KH +,M&KK	$$+LL$=$=$K$K$M#NbQXQ]Q]QjQjQpQpPqqr!s ~~,,y)||F#  + 	C" #C ax  !,D*EFw*@(AB	C ##G,/TT
 	
 O-	$LL#
	C 	Cs   AE* #AF
*F
Fc                 2   | j                   j                  d      }| j                   j                  d      }|s.t        j                  | t	        d             t        ddid      S 	 t        j                  j                  |      }|dk(  rd}||_	        |j                          t        j                  | t	        d             t        ddi      S # t        j                  $ r1 t        j                  | t	        d	             t        ddid
      cY S w xY w)z9
    Updates the probation end date for a candidate.
    r   probation_endr  r  r  r   r   rF   r   i  r  NzProbation end date updatedrt   )rE   rP   r   r   ru   r   rA   rO   r   r  rR   rt   )rX   r   r  r   s       r\   update_probation_endr    s     <<##N3LLL$$_5Mw"9 :;VX.s;;<%%))\):	
 +INNWa <=>+,, !! <w"8 9:VX.s;;<s   ( C ADDc                    | j                   j                  d      }|s | j                  j                  j                  }t
        j                  j                  |dd      j                         }g }|D ]  }|j                  ||j                  j                         |j                  j                  d      j                         |j                  j                  d      j                         |j                  j                  d      j                         |j                  j                  d	      j                         |j                  j                  d
      j                         d        t        | dd|i      S )z6
    This method is used to show the task report.
    rH   TF)employee_id__idcandidates__is_active"candidates__recruitment_id__closedtodor   	scheduledongoingstuckdone)r   total_candidatesr  r  r  r  r  z%onboarding/dashboard/task_report.htmlr   )r   rP   ry   rz   rG   r<   rO   rT   rj  r-  r   r9  r   )rX   rH   my_tasksr   r   s        r\   task_reportr!    sQ    ++//-0Kll//22%%,,#"+0 -  hj	 
 E 
$($:$:$@$@$B..55V5DJJL!33::+:NTTV1188	8JPPR//66g6FLLN..55V5DJJL
	

 'BWeDTUUr^   zonboarding.view_candidatetaskc                 ~    | j                   d   }t        j                  j                  |      }t	        | dd|i      S )zM
    This method is used to render template to show the onboarding tasks
    r   )onboarding_task_id__idz%onboarding/dashboard/status_list.htmlcandidate_tasks)r   r9   rO   rT   r   )rX   r   r$  s      r\   candidate_tasks_statusr%    sF     kk)$G#++22'2RO/	O, r^   c                    | j                   d   }t        j                  j                  |      }| j                   d   }|dv r6||_        |j                          t        j                  | t        d             t        d      S )z5
    This method is to update the candidate task
    r   rF   r   )r  r  r  r  r  z!Task status updated successfully.zW<script>$('#reloadMessagesButton').click(); $('#myOnboardingReload').click(); </script>)
r   r9   rO   rP   r   rR   r   rt   ru   r   )rX   r   r  r   s       r\   change_task_statusr'    s     kk)$G"**..'.:N[["F   !'!$G"HIa r^   zrecruitment.change_recruitmentc                 @   | j                   j                  d      }| j                   j                  d      }d}|r|s!t        j                  | d       t	        d      S |dvr!t        j                  | d       t	        d      S 	 t
        j                  j                  |      }|dv r||_        |j                          t        j                  | d
       d}t        d| d      S # t
        j                  $ r$ t        j                  | d	       t	        d      cY S w xY w)z?
    This method is used to update the offer letter status
    r   r   Nzcandidate or status is missingz/onboarding/candidates-view/)not_sentsentacceptedrejectedjoinedzPlease Pass valid statusrF   r  z+Status of offer letter updated successfullyz@
                <script>
                window.location.href="z,"
                </script>
                )r   rP   r   r   r   rA   rO   r   offer_letter_statusrR   rt   r   )rX   r   r   r   urls        r\   update_offer_letter_statusr0    s    ;;??>2L[[__X&FIvw @A677KKw :;6778%%))\):	 GG(.	%WKL
(C''*e ,	  !! 8w 566778s    C& &4DDz!recruitment.add_rejectedcandidatec                    | j                   j                  d      }d}|r.t        j                  j	                  |      j                         }t        d|i|      }| j                  dk(  rbt        | j                  |      }|j                         r;|j                          t               }t        j                  | d       t        d      S t        | d	d
|i      S )zF
    This method is used to add candidates to rejected candidates
    r   Nr   )r   r   rE   r   zCandidate reject reason savedr  zonboarding/rejection/form.htmlrM   )r   rP   rC   rO   rT   r7  r@   rN   rE   rQ   rR   r   rt   r   r   )rX   r   r   rM   s       r\   add_to_rejected_candidatesr2    s     ;;??>2LH$,,333NTTV .D ~~$W\\HE==?IIK(*DW&EF KLL';fd^LLr^   c                    | j                   j                  d      }t        j                  j	                  ddd      x}}|D cg c]  }t        |j                         }}|j                         }||d}t        |d      S c c}w )z9
    This method is used for select all in candidate
    r   TFr   r   r   rN  total_countr  )	r   rP   rA   rO   rT   r   rG   r9  r   )rX   r   rS  r  emprN  r6  r   s           r\   candidate_selectr8  2  s    
 ++//&)K$,,33$ 4  I ,55CCK5L5//#K+KHGe,, 6s   Bc                    | j                   j                  d      }| j                   j                  d      }|rt        j                  |      ni }|dk(  r{t	        |t
        j                  j                  ddd            }|j                  }|D cg c]  }t        |j                         }}|j                         }||d}	t        |	      S y	c c}w )
z?
    This method is used to select all filtered candidates
    r   rT   rv   TFr4  r
  r5  N)r   rP   r   r   r=   rA   rO   rT   r  r   rG   r9  r   )
rX   r   filteredfiltersr  filtered_candidatesr7  rN  r6  r   s
             r\   candidate_select_filterr=  G  s     ++//&)K{{x(H&.djj"BGe*&&--', . 
 /11/BCCFFCC)//1#/LG$$%  Ds   Cc                 ,   t        j                  | j                  j                  dg             }| j                  j                  d      }|D ]  }	 t        j
                  j                  t        |            j                         }|j                  |k7  r.||_	        |j                          t        j                  | d       n%t        j                  | dj                  |              t        dd	      S #  t        j                  | d       Y xY w)
zE
    This function is used to bulk update the offerletter status
    r  r   rF   z(offer letter status updated successfullyzStatus already in {} statusCandidate doesnot existrt   Fr  )r   r   r   rP   rA   rO   rT   r  r7  r.  rR   r   rt   r   r   r   rX   r  r   rG   r   s        r\   offer_letter_bulk_status_updaterA  f  s     **W[[__UB/
0C[[__X&F 
?		?!))00CG0<BBDI,,606	-   *TUw(E(L(LV(TU
? 	..	?NN7$=>s   BC99Dc                    t        j                  | j                  j                  dg             }| j                  j                  d      }|D ]`  }	 t        j
                  j                  t        |            j                         }|j                          t        j                  | d       b t        dd      S #  t        j                  | d       Y xY w)	zD
    This function is used to bulk delete onboarding candidates
    r  r   rF   zcandidate deleted successfullyr?  rt   Fr  )r   r   r   rP   rA   rO   rT   r  r7  r   r   rt   r   r   r@  s        r\    onboarding_candidate_bulk_deleterC  {  s    
 **W[[__UB/
0C[[__X&F ?	?!))00CG0<BBDIW&FG	? 	..	?NN7$=>s   AB==C)__doc__r  r   loggingr  r  r5  urllib.parser   djangor   django.contribr   django.contrib.authr   django.contrib.auth.modelsr   django.core.files.baser   django.core.mailr	   r
   django.core.paginatorr   django.db.modelsr   django.httpr   r   r   django.shortcutsr   r   django.template.loaderr   django.urlsr   django.utils.translationr   r   r   ru   django.views.decorators.csrfr   django.views.decorators.httpr   r   base.backendsr   base.methodsr   r   r   r   r   base.modelsr   r    employee.modelsr!   r"   r#   horillar$   horilla.decoratorsr%   r&   r'   r(   horilla.group_byr)   r  horilla_documents.modelsr*   notifications.signalsr+   onboarding.decoratorsr,   r-   r.   onboarding.filtersr/   r0   onboarding.formsr1   r2   r3   r4   r5   r6   r7   onboarding.modelsr8   r9   r:   r;   r<   recruitment.filtersr=   r>   r?   recruitment.formsr@   recruitment.modelsrA   rB   rC   recruitment.pipeline_grouper	getLogger__name__r]   rW   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rJ  rZ  r   rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r%  r'  r0  r2  r8  r=  rA  rC   r^   r\   <module>rj     s'      	   !  # % + . 4 + + H H - 3  2 6 4 K 0  9 R R   C - ( 
 P    U T 3 H H :			8	$ ?@W A  W2!H BC/ D  /d BC D > 89BCG D : G, 895 :  5p ;<2 =  2j 78;<% = 9 %6 01Q 2 Q. 34O 5 O. <=0 > 0@ 782 9  2j ?@" A "J 67 8 & ?@! A  !H 56gE 7 gET2j 898 : 8v 89; : ;| %#P+,!H]@ F$4 
= 
= vh89) :   )X  D 89# : #L vh;<4 =   4n vh;<" =   "J vh89 :        F 12-   3 -D 67I 8 I& 67" 8 "@ 78* 9 *& 34* 5 *& vh
    
 78$ 9  $N 34-   5 -4 9:V ;  V8 67
 8 
 89 : . 56 7 @ 89M :  M* - -( 12% 3 %:/*/r^   