
    vg0?                     v   d 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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m Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 e ed       edg      d                      Z2e ed       edg      d                      Z3e e%d      d               Z4e$d        Z5e e%d       eddg      d                       Z6e ed!       eddg      d"                      Z7e ed!       edg      d#                      Z8e ed!      d$               Z9e ed!       edg      d%                      Z:e e%d&      d'               Z;e e%d(       edg      d)                      Z<ed+d*       Z=y),z\
actions.py

This module is used to register methods to delete/archive/un-archive instances
    N)template)messages)
Permission)ProtectedError)HttpResponseHttpResponseRedirectJsonResponse)redirectrender)gettext)gettext_lazy)require_http_methods)HorillaMailTemplate)Employee)login_requiredpermission_required)group_by_queryset)notify)candidate_login_requiredmanager_can_enterrecruitment_manager_can_enter)StageFilter)StageCreationForm)	CandidateRecruitmentStage	StageNote)paginator_qryzrecruitment.delete_recruitment)permPOSTc           	         	 	 t         j                  j                  |      }|j                  j                         }t        j                  j                  dd      }t        j                  j                  dd      }|D ]  }|j                  j                         }t        |      d	k(  s,|D ]1  }|j                  j                   j#                  |j$                         3 |D ]1  }	|j                  j                   j#                  |	j$                         3  	 |j'                          t	        j(                  | t        d
             t         j                  j                         }t        | j                  j                  dd            S # t         j                  $ rG t	        j
                  | t        d             t        | j                  j                  dd            cY S w xY w# t*        $ r}
t-               }|
j.                  D ]>  }|j1                  t3        |j4                  j6                  j9                                      @ dj;                  |      }t	        j
                  | t        dj=                  |                   Y d}
~
Ed}
~
ww xY w# t         j                  t>        f$ r# t	        j
                  | t        d             Y jw xY w)zi
    This method is used to permanently delete the recruitment
    Args:
        id : recruitment_id
    idRecruitment not found.HTTP_REFERER/recruitmentstage)content_type__app_labelcontent_type__model	candidate   z!Recruitment deleted successfully.,z7You cannot delete this recruitment as it is using in {}NzRecruitment Does not exists..) r   objectsgetDoesNotExistr   error_r   METArecruitment_managersallr   filterrecruitment_setlenemployee_user_iduser_permissionsremover#   deletesuccessr   setprotected_objectsadd___metaverbose_name
capitalizejoinformatOverflowError)requestrec_idrecruitment_objrecruitment_mangersall_stage_permissionsall_candidate_permissionsmanagerall_this_mangerstage_permissioncandidate_permissionemodel_verbose_name_setsobjmodel_verbose_name_strs                 -/var/www/horilla/recruitment/views/actions.pyrecruitment_deleterW   #   s   *D	O)11555@O .BBFFH * 2 2 9 9$1w !: !
 %/$6$6$=$=$1{ %> %
! + 
	G%5599;O?#q((A $,,==DD(++ -B (,,==DD,//
		""$Wa(K&LM &--113   0 0 EFFQ '' 	ONN7A&>$?@'(8(8(MNN	O0  	&)e#** U'++Bsyy/E/E/P/P/R,STU&)ZZ0G%H"NNMTT. 	 $$m4 Dw"A BCDsb    F B	J -A.J /G+ J AG(%J 'G((J +	J4BJ
J JJ 8KKc           	         	 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                  D ]>  }|j                  t        |j                  j                  j!                                      @ dj#                  |      }t	        j                  | t        dj%                  |                   Y d}~d}~ww xY w)	zThis method is used to delete the recruitment instance

    Args:
        id: recruitment instance id
    Returns:
        HttpResponseRedirect: Used to refresh the page
    r"   zRecruitment deleted.r$   r-   z"Recruitment already in use for {}.Nr%   r&   )r   r.   r/   r<   r   r=   r2   r0   r1   r   r>   r?   r@   rA   rB   rC   rD   rE   rF   r   r3   )rH   rI   rJ   rR   models_verbose_name_setsrT   models_verbose_name_strs          rV   recruitment_delete_pipeliner[   Z   s   
%--11V1< !$:";<   0 0 EFF ## =w": ;< 
#&5 && 	RC$((CII,B,B,M,M,O)PQ	R#&**-E"F299:QRS	
 	

s   AA6 62E*E2BEEzrecruitment.delete_stagenotec                    	 t         j                  j                  |      }|j                  j                  }|j                          t        j                  | t        d             d}t        |      S # t         j                  $ r. t        j                  | t        d             d}Y t        |      S t        $ r2 t        j                  | t        d             d d}Y t        |      S w xY w)	6
    This method is used to delete the stage note
    r"   zNote deleted zNote not found.z)<script>window.location.reload()</script>zYou cannot delete this note.zD
            <span hx-trigger='load' hx-get='/recruitment/view-note/z4/' hx-target='#activitySidebar'></span>
            )r   r.   r/   candidate_idr#   r<   r   r=   r2   r0   r1   r   r   )rH   note_idnoter_   scripts        rV   note_deleterc   w   s      $$$0((++!N"34  !! =w"3 45<   w"@ ABDDP> R s   A'A4 44C.4-C.-C.c                     d}t         j                  j                  |      }|j                          t	        j
                  | t        d             t        |      S )r]   r^   r"   zNote deleted.)r   r.   r/   r<   r   r=   r2   r   )rH   r`   rb   ra   s       rV   note_delete_individualre      sK     F  G ,DKKMWa01    zrecruitment.delete_stageDELETEc           	      4   	 	 t         j                  j                  |      }|j                  j                  }|j                  j                         }|D ]S  }|j                  j                         }t        |      dk(  rOt        j                  j                  d      }|j                   j"                  j%                  |j                         |j'                  d	      }t        |      dk(  rt        j                  j                  d
      }	t        j                  j                  d      }
|j                   j"                  j%                  |	j                         |j                   j"                  j%                  |
j                         |j                  j%                  |       V 	 |j)                          t        j*                  | t        d             | j                  j                  d      }| j                  j                  d      }|r|dk(  rd|v rtC        d d      S t        | j                  j                  dd            S # t         j
                  $ rG t        j                  | t        d             t        | j                  j                  dd            cY S w xY w# t,        $ r}t/               }|j0                  D ]>  }|j3                  t5        |j6                  j8                  j;                                      @ dj=                  |      }t        j                  | t        dj?                  |                   Y d}~wd}~ww xY w# t         j
                  t@        f$ r# t        j                  | t        d             Y w xY w)zY
    This method is used to delete stage permanently
    Args:
        id : stage_id
    r"   zStage not found.r%   r&   r,   view_recruitment)codenameinitial)
stage_typeadd_candidatechange_candidatezStage deleted successfully.r-   z5You cannot delete this stage while it's in use for {}NzStage Does not exists..HTTP_HX_REQUESTHTTP_HX_CURRENT_URLtruez
stage-viewz/recruitment/stage-data/)"r   r.   r/   recruitment_idr#   r0   r   r1   r2   r   r3   stage_managersr5   	stage_setr8   r   r9   r:   r;   r6   r<   r=   r   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r
   )rH   stage_id	stage_objrr   rs   rN   rO   ri   initial_stage_managerrm   rn   rR   rY   rT   rZ   
hx_requesthx_current_urls                    rV   stage_deleterz      s   &>	O))X)6I&5588N
 #11557% 	5G%//335O?#q(#-#5#5#9#9CU#9#V ((99@@AQATATU$3$:$:i$:$P!()Q. * 2 2 6 6 6 P#-#5#5#9#9CU#9#V ((99@@AQAQR((99@@AQATATU$$++G4	5	Wa(E&FG  !!"34J\\%%&;<NjF*|~/M2>2B!DEE 0 0 EFFO !! 	ONN7A&8$9:'(8(8(MNN	O(  	'*u$** V(,,R		0F0F0Q0Q0S-TUV'*jj1I&J#NNKRR/ 	 . >w"; <=>sU   6I E3M -/J. AJ+(M *J++M .	M7BMM MM 8NNzrecruitment.delete_candidatec           	      &   	 	 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                  D ]>  }|j                  t        |j                  j                  j!                                      @ dj#                  |      }t	        j                  | t        dj%                  |                   Y d}~d}~ww xY w# t         j                  t&        f$ r# t	        j                  | t        d             Y ?w xY w)
za
    This method is used to delete candidate permanently
    Args:
        id : candidate_id
    r"   zCandidate deleted successfully.Candidate not found.r-   z@You cannot delete this candidate because the candidate is in {}.NCandidate Does not exists.r%   r&   )r   r.   r/   r<   r   r=   r2   r0   r1   r   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r   r3   )rH   cand_idrR   models_verbose_name_setrT   rZ   s         rV   candidate_deleter      sH   A	!!W!-446Wa(I&JK$   0 0 EFF# %% 	?NN7A&<$=> 	&)e#** U'++Bsyy/E/E/P/P/R,STU'*jj1H&I#NNV]]/ 	 ""M2 Aw"> ?@As=   AA5 52E'E )E1BEE EE 8FFc                    | j                   d   }t        j                  |      }|D ]W  }	 t        j                  j                  |      }|j                          t        j                  | t        d      d|iz         Y t        ddi      S # t        j                  $ r" t        j                  | t        d             Y t        $ r' t        j                  | t        d      diz         Y w xY w)	z7
    This method is used to bulk delete candidates
    idsr"   z%(candidate)s deleted.r+   r|   zYou cannot delete %(candidate)smessageSuccess)r    jsonloadsr   r.   r/   r<   r   r=   r2   r0   r1   r   r	   )rH   r   r~   candidate_objs       rV   candidate_bulk_deleter      s     ,,u
C
**S/C 	%--11W1=M  "34]7SS	 I.// %% 	?NN7A&<$=> 	NN34]7SS	s   AB2C1,C10C1c                    	 t         j                  j                  |      }|j                   |_        |j	                          |j                  st        d      n
t        d      }t        j                  | t        d      d|iz         t        | j                  j                  dd            S # t         j                  t        f$ r" t        j                  | t        d             Y _w xY w)	zA
    This method is used to archive or un-archive candidates
    r"   archivedun-archivedzCandidate is %(message)sr   r}   r%   r&   )r   r.   r/   	is_activesaver2   r   r=   r0   rG   r1   r   r3   )rH   r~   r   r   s       rV   candidate_archiver     s    A!))---9&3&=&="='4'>'>!J-AmDT!$>"?9gBV"VW   0 0 EFF ""M2 Aw"> ?@As   BB/ /8C*)C*c                    | j                   d   }t        j                  |      }d}t        d      }| j                  j                  d      dk(  rd}t        d      }|D ]i  }t        j                  j                  |      }||_        |j                          t        j                  | t        d	      j                  ||
             k t        ddi      S )zC
    This method is used to archive/un-archive bulk candidates
    r   Tr   r   FalseFr   r"   z{candidate} is {message})r+   r   r   r   )r    r   r   r2   GETr/   r   r.   r   r   r   r=   rF   r	   )rH   r   r   r   r~   r   s         rV   candidate_bulk_archiver     s     ,,u
C
**S/CIG{{{#w.	J- 	
!))---9"+()00' 1 	
		
 I.//rf   zrecruitment.change_stagec                    t         j                  j                  |      }t        j                  j                  |      }t	        j
                  | j                  j                  |j                  d| d| d| dd| d| dd	
	       |j                  j                  |       t        j                  | t        d             t         j                  j                         }|j                  d      }t!        |d| j"                  j                  d            }t%               }t'               }| j"                  j)                         }	t+        | dt-        || j"                  j                  d            |	|||d      S )z
    This method is used to remove selected stage manager and also removing the  given
    permission if the employee is not exists in more stage manager or recruitment manager
    Args:
        mid : manager_id in the stage
        sid : stage_id
    r"   z/You are removed from stage managers from stage uG   تمت إزالتك من مديري المرحلة من المرحلة u,   Sie wurden als Bühnenmanager von der Stufe 	 entferntz:Has sido eliminado/a de los gerentes de etapa de la etapa uA   Vous avez été supprimé(e) en tant que responsable de l'étape person-remover^   	recipientverbverb_arverb_deverb_esverb_friconr
   z#Stage manager removed successfully.T)recruitment_id__is_activerr   rpagezstage/stage_group.htmlpage)datapdformfrecruitments)r   r.   r/   r   r   senduseremployee_getr9   rs   r;   r   r=   r2   r5   r6   r   r   r   r   	urlencoder   r   )
rH   midsidrv   rN   stagesr   
filter_objr   previous_datas
             rV   remove_stage_managerr   9  s`    !!S!)I""c"*G
KK!!**>ykJYZcYde>ykSLYKXST]S^_
 ##G,Wa EFG]] F]]T]:F$ L
 JDKK))+M !&'++//&*AB(	

 
rf   zrecruitment.change_recruitmentc                 d   t         j                  j                  |      }t        j                  j                  |      }|j                  j                  |       t        j                  | t        d             t        j                  | j                  j                  |j                  d| d| d| dd| d| d	d
	       t         j                  j                         }| j                  j!                         }t#        | dt%        || j                  j                  d            |d      S )a0  
    This method is used to remove selected manager from the recruitment,
    when remove the manager permissions also removed if the employee is not
    exists in more stage manager or recruitment manager

     Args:
        mid : employee manager_id in the recruitment
        rid : recruitment_id
    r"   z)Recruitment manager removed successfully.z.You are removed from recruitment manager from uA   تمت إزالتك من وظيفة مدير التوظيف في z&Sie wurden als Personalvermittler von r   u6   Has sido eliminado/a como gerente de contratación de uV   Vous avez été supprimé(e) en tant que responsable                du recrutement de r   r^   r   z&recruitment/recruitment_component.htmlr   )r   r   )r   r.   r/   r   r4   r;   r   r=   r2   r   r   r   r   r9   r5   r   r   r   r   )rH   r   ridrJ   rN   recruitment_querysetr   s          rV   remove_recruitment_managerr   i  s#    "))---5O""c"*G((//8Wa KLM
KK!!**=o=NOSTcSde88ISHHYZ##2"35 '..224KK))+M0!"68OP	
 rf   c                 <   |r?t         j                  j                  |      j                  }t	        j
                  |      }| j                  j                  d      r6| j                  j                  d      }t	        j
                  d|z   dz         }| j                  j                  d      }|rat        j                  j                  |      }t	        j                  || j                  j                  d      }j                  |      xs d}t        di      S )	z9
    This method is used to return the mail template
    r"   wordz{{z}}r_   )instanceself body)r   r.   r/   r   r   Templater   r   Contextr   r   r   r	   )rH   obj_idr   template_bdyr   r_   r   contexts           rV   get_templater     s    
 "**..&.9>>((.{{v{{v&((t);<;;??>2L!))--->""&0I0IJ
 ""7+2s''rf   )N)>__doc__r   djangor   django.contribr   django.contrib.auth.modelsr   django.db.modelsr   django.httpr   r   r	   django.shortcutsr
   r   django.utils.translationr   rA   r   r2   django.views.decorators.httpr   base.modelsr   employee.modelsr   horilla.decoratorsr   r   horilla.group_byr   notifications.signalsr   recruitment.decoratorsr   r   r   recruitment.filtersr   recruitment.formsr   recruitment.modelsr   r   r   r   recruitment.views.paginator_qryr   rW   r[   rc   re   rz   r   r   r   r   r   r   r    rf   rV   <module>r      sP     # 1 + H H - 2 6 = + $ B . ( 
 , / G G 9 :;vh1G   < 1Gh :;vhG   < G4 67  8  *     23vx()1G * 4 1Gh 89x()G * : G< 89vh0   : 0. 89G : G 89vh0   : 00 23+ 4 +\ 89vh#   : #L ( (rf   