
    vg*                        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
 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 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$  G d de      Z% G d de      Z& eee%      d        Z' G d de      Z( G d de      Z) G d de      Z* G d de      Z+ G d  d!e      Z, G d" d#e      Z- G d$ d%e      Z. G d& d'e      Z/y())    )Iterable)date	timedelta)apps)User)models)	post_save)receiver)gettext_lazy)HorillaCompanyManager)Company)Employee)horilla_middlewares)_thread_locals)get_horilla_model_class)HorillaModel)HorillaAuditInfoHorillaAuditLog)notifyc                   :    e Zd ZdZd ed      fd ed      fgZ ej                  d      Z ej                  d      Z
 ej                  e      Z ej                  d	de
      Z ej                  eej"                  dd      Z ed      Zd Z fdZ xZS )Offboarding
    Offboarding model
    ongoingOngoing	completed	Completed   
max_length   
   )r   defaultchoicesTr   )	on_deletenullverbose_name
company_idc                     | j                   S Ntitleselfs    &/var/www/horilla/offboarding/models.py__str__zOffboarding.__str__*       zz    c                     | j                    }t        |   |i | |r@g d}|D ]7  }t               }| |_        |d   |_        |d   |_        |j                          9 y )N))zExit interview	interview)zWork Handoverhandover)FNFfnf)Farewellother)Archivedarchivedr      )pksupersaveOffboardingStageoffboarding_idr+   type)r-   argskwargsis_newstagesstagenew	__class__s          r.   r>   zOffboarding.save-   sn    WWd%f%F   &(%)"!!H	 8
 	r1   )__name__
__module____qualname____doc___statusesr   	CharFieldr+   	TextFielddescriptionManyToManyFieldr   managersstatus
ForeignKeyr   CASCADEr'   r   objectsr/   r>   __classcell__rH   s   @r.   r   r      s     AiL)K;+HIHF+E"&""c2K%v%%h/HVYQF"""..	J $L1G r1   r   c            	       h   e Zd ZdZd ed      fd ed      fd ed      fd ed	      fd
 ed      fd ed      fgZ ej                  d      Z ej                  de      Z	 ej                  eej                        Z ej                  e      Z ej"                  dd      ZdefdZd Zy)r?   r   notice_periodzNotice periodr6   zFnF Settlementr8   Otherr3   	Interviewr4   zWork handoverr:   r9   r   r      )r   r#   r$   r   F)r"   editablereturnc                 ,    t        | j                        S r)   )strr+   r,   s    r.   r/   zOffboardingStage.__str__V   s    4::r1   c                      | j                   dk(  S )zF
        This method is to check the stage is archived or not
        r:   )rA   r,   s    r.   is_archived_stagez"OffboardingStage.is_archived_stageY   s     yyJ&&r1   N)rI   rJ   rK   rL   rM   typesr   rO   r+   rA   rU   r   rV   r@   rR   r   rS   IntegerFieldsequencerc   r/   re    r1   r.   r?   r?   B   s    
 
!O,-	"#$	!G*	an%	Q'(	Qz]#E F+E6r59D&V&&{fnnMN%v%%h/H"v""1u=H 'r1   r?   )senderc                 h    |r0t               }d|_        ||_        d|_        |j	                          yy)zT
    This is post save method, used to create initial stage for the recruitment
    zNotice Periodr[   N)r?   r+   r@   rA   r>   )rj   instancecreatedrC   initial_stages        r.   create_initial_stagero   `   s8    
 (*-'/$, r1   c                   6    e Zd ZdZ ej
                  d      Zy)OffboardingStageMultipleFilez&
    OffboardingStageMultipleFile
    zoffboarding/attachments)	upload_toN)rI   rJ   rK   rL   r   	FileField
attachmentri   r1   r.   rq   rq   m   s     "!!,EFJr1   rq   c                   T   e Zd ZdZddgZ ej                  eej                  d      Z	 ej                  eej                  dd      Z ej                  d	      Z ej                  d
edd      Z ej"                  d	      Z ej"                  dd      Z ed      ZdefdZy)OffboardingEmployeez7
    OffboardingEmployee model / Employee on stage
    )daydays)monthMonthr   r$   r&   StageTr$   r&   r%   )r%   r!   ry   )r   r#   r"   r%   )r%   blank+employee_id__employee_work_info__company_idrelated_company_fieldra   c                 6    | j                   j                         S r)   )employee_idget_full_namer,   s    r.   r/   zOffboardingEmployee.__str__   s    --//r1   N)rI   rJ   rK   rL   unitsr   OneToOneFieldr   rV   r   rU   r?   stage_idrg   r[   rO   unit	DateFieldnotice_period_startsnotice_period_endsr   rW   rc   r/   ri   r1   r.   rv   rv   u   s     01E&&&&FNNK !v  FNNtH (F''T2M6r5'PTUD+6++6)))t4@#KG0 0r1   rv   c                       e Zd ZdZd ed      fd ed      fd ed      fgZ ej                  eej                  d	      Z
 ej                  d
d      Z ej                  dd      Z ej                         Z ej                  ded      Z ej                  eej                  dd      Z ed      Z fdZd Z xZS )ResignationLetterz,
    Resignation Request Employee model
    	requested	RequestedapprovedApprovedrejectedRejectedr   r{   d   T)r   r%   r    )r%   r   r!   r   r#   r"   F)r$   r`   r%   r   r   c                 D    t        |   |i | | j                  dk(  r	 y )Nr   )r=   r>   rT   )r-   rB   rC   rH   s      r.   r>   zResignationLetter.save   s&    d%f%;;*$r1   c                    t         j                  j                  | j                        j	                         }|r|n	t               }| j                  |_        t
        j                  j                  d      j                  |      j	                         |_        t        j                  d      r@t        dd      j                  j                  | j                  d      j	                         nd	}	 |r|t        |j                        z   n|}||_        ||_        |r|rt        |t               st        |t               st#        |j$                  |j&                  |j(                  
      t#        |j$                  |j&                  |j(                  
      z
  }|j*                  }|dkD  r|nd	|_        |dkD  rdnd	|_        |j1                          y	#  |}Y xY w)zL
        This method is used to convert/add employee to offboarding
        )r   
created_at)r@   payrollcontract)	app_labelmodelactive)r   contract_statusN)rw   ry   yearr   rw   )rv   rW   filterr   firstr?   order_byr   r   is_installedr   r   notice_period_in_daysr   r   
isinstancerc   r   rw   ry   r   rx   r[   r   r>   )r-   offboardingr   r   offboarding_employeecontract_notice_end_datediffss          r.   to_offboarding_employeez)ResignationLetter.to_offboarding_employee   s     3::AA((  B  

%' 	 %9 >Q>S 	 ,0+;+;($$--l;V;V/UW 	%   + $izJWVV(8(8(VSUW 	!	4 , %4JJKL (	  5I12D/ "3S9137&**(..',, (,,*00)..	E JJE:?!) .16 %!!#/	4!3s   2G G)rI   rJ   rK   rL   rM   rN   r   rU   r   rV   r   rO   r+   rP   rQ   r   planned_to_leave_onrT   rv   offboarding_employee_idr   rW   r>   r   rX   rY   s   @r.   r   r      s    
 
an%	Qz]#	Qz]#H
 $&##FNNK F$7E"&""=K*&**,VX{SF/f//v~~D $KG8$r1   r   c                       e Zd ZdZ ej
                  d      Z ej                  e      Z	 ej                  eej                  ddd      Z G d d      Zd	efd
Zy)OffboardingTaskz
    OffboardingTask model
       r   r|   T)r$   r&   r%   r~   c                       e Zd ZddgZy)OffboardingTask.Metar+   r   NrI   rJ   rK   unique_togetherri   r1   r.   Metar      s    "J/r1   r   ra   c                     | j                   S r)   r*   r,   s    r.   r/   zOffboardingTask.__str__   r0   r1   N)rI   rJ   rK   rL   r   rO   r+   rR   r   rS   rU   r?   PROTECTr   r   rc   r/   ri   r1   r.   r   r      sh     F+E%v%%h/H v  ..H0 0 r1   r   c                   h    e Zd ZdZd ed      fd ed      fd ed      fd ed	      fgZ ej                  eej                  d
d      Z
 ej                  ded      Z ej                  eej                        Z ej                  ddd      Z edeg      Z G d d      Z fdZ xZS )EmployeeTaskz
    EmployeeTask model
    todoTodoin_progresszIn progressstuckStuckr   r   r   Tr}   r   r   r_   Fr    )r%   r`   r   history_set)related_namebasesc                       e Zd ZddgZy)EmployeeTask.Metar   task_idNr   ri   r1   r.   r   r     s    ()4r1   r   c                    t        |   |i | t        t        dd       }t	        j
                  |j                  j                  | j                  j                  j                  d| j                  j                   d    dd	       y )NrequestzOffboarding task "z" has been assignedz offboarding/offboarding-pipelineinformation)	recipientverbverb_arverb_deverb_esverb_frredirecticon)r=   r>   getattrr   r   senduseremployee_getr   employee_user_idr   r+   )r-   rB   rC   r   rH   s       r.   r>   zEmployeeTask.save  sz    d%f%.)T:LL%%&&22CC%dll&8&8%99LM7
	
r1   )rI   rJ   rK   rL   rM   rN   r   rU   rv   rV   r   rO   rT   r   r   rP   rQ   r   r   historyr   r>   rX   rY   s   @r.   r   r      s    
 
6	-()	!G*	an%	H $&##..	K VXvNFf6>>JG"&""uMK"
G5 5
 
r1   r   c                       e Zd ZdZ ej
                  d      Z ej                  d      Z ej                  e
ej                        Z ej                  e      Zy)
ExitReasonz
    ExitReason model
    2   r   r    r_   N)rI   rJ   rK   rL   r   rO   r+   rP   rQ   rU   rv   r   r   rR   rq   attachmentsri   r1   r.   r   r   +  s^     F+E"&""c2K/f//v~~ )&(()EFKr1   r   c                   J    e Zd ZdZ ej
                  edd      Z ej                  ddd      Z	 ej                  eej                  dd      Z ej                  eej                  dd      Z ej                  eej                  dd      Z G d d	      Z fd
Z xZS )OffboardingNotez
    OffboardingNote
    TF)r~   r`   r    )r%   r~   r   )r$   r%   r`   c                       e Zd ZdgZy)OffboardingNote.Metaz-created_atN)rI   rJ   rK   orderingri   r1   r.   r   r   K  s	    !?r1   r   c                     t        t        j                  dd       }|r|j                  j                  }|| _        | j                  r| j                  j                  | _        t        | $  |i |S )Nr   )
r   r   r   r   r   note_byr   r   r=   r>   )r-   rB   rC   r   
updated_byrH   s        r.   r>   zOffboardingNote.saveN  sa    -<<iN 22J%DL ,,55DMw|T,V,,r1   )rI   rJ   rK   rL   r   rR   rq   r   rP   rQ   rU   r   SET_NULLr   rv   r   r   r?   r   r   r>   rX   rY   s   @r.   r   r   8  s     )&(($D5K #&""DSIKfFOO$G $&##v~~D5K !v  FNNH# #- -r1   r   c                   t    e Zd ZdZ ej
                  d      Z ej                  eej                  d      Z
y)OffboardingGeneralSettingz$
    OffboardingGeneralSettings
    F)r"   T)r$   r%   N)rI   rJ   rK   rL   r   BooleanFieldresignation_requestrU   r   rV   r'   ri   r1   r.   r   r   X  s6     .&--e<"""7fnn4PJr1   r   N)0collections.abcr   datetimer   r   django.appsr   django.contrib.auth.modelsr   	django.dbr   django.db.models.signalsr	   django.dispatchr
   django.utils.translationr   rM   base.horilla_company_managerr   base.modelsr   employee.modelsr   horillar   horilla.horilla_middlewaresr   horilla.methodsr   horilla.modelsr   horilla_audit.modelsr   r   notifications.signalsr   r   r?   ro   rq   rv   r   r   r   r   r   r   ri   r1   r.   <module>r      s    $ $  +  . $ 6 >  $ ' 6 3 ' B (
', 'T'| '< 
)K(	 )	G< G0, 00W$ W$tl ,+
< +
\
G 
G-l -@Q Qr1   