
    vgT                        d dl 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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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l(m)Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK i g fdZLd ZMe% e0dd      d               ZNe%e$ e0dd      d                      ZOe%e$ e'd      d                       ZPe% e'd!      d"               ZQe% e2d#      d$               ZRe% e0d%      d&               ZSe% e'd'      d(               ZTe% e'd)      d*               ZUe%e$ e0d+      d,                      ZVe%e$ e0d-d      dKd.                     ZWe%d/        ZXe% e&d01      d2               ZYe% e'd3      d4               ZZe% e3d5      d6               Z[e% e0d7d      d8               Z\e% e0d9      d:               Z]e% e3d;      d<               Z^e%e$d=               Z_e% e'd>       e1d?      d@                      Z`e% e'd>      dA               Zae%e$ e1d?      dB                      Zbe% e1d?      dC               Zce%e$ e1d?      dD                      Zde% e1d?       e'dE      dF                      Zee%e$ e'dG      dH                      Zfe% e'd%      dI               ZgdJ Zhy)L    N)datetime	timedelta)parse_qs)apps)messages)User)	Paginator)HttpResponseJsonResponse)redirectrender)reverse)gettext_lazy)intial_notice_period)closest_numberseval_validatepaginator_qrysortby)general_settings)Employee)hx_request_requiredlogin_requiredmanager_can_enterpermission_required)group_by_queryset)get_horilla_model_class)notify)any_manager_can_entercheck_feature_enabledoffboarding_manager_can_enter&offboarding_or_stage_manager_can_enter)LetterFilterLetterReGroupPipelineEmployeeFilterPipelineFilterPipelineStageFilter)NoteFormOffboardingEmployeeFormOffboardingFormOffboardingStageFormResignationLetterFormStageSelectFormTaskForm)	EmployeeTaskOffboardingOffboardingEmployeeOffboardingGeneralSettingOffboardingNoteOffboardingStageOffboardingStageMultipleFileOffboardingTaskResignationLetterc           	      N   g }|D ]  }g }t        | |j                  j                               j                  j	                  d      }g }|g g d}|D ]  }|j                  |g d       t        | t        j                  j                  |d            j                  j	                  d      }	d|j                  z   t        |j                        z   }
t        |	d	| j                  |
      |
      j                  }||j                   j                         D cg c]  }|j                   c}z   }|d
   |z   |d
<    g }|d
   }|D ]>  }d}|D ]  }|d   |k(  s|j                  |       d} n |r,|j                  d|i       @ |||d}|j                  |        |S c c}w )N)querysetid)offboardingstages	employees)grouperlistT)stage_idemployee_id__is_activestage_id__idpager?   r;   Fr=   )r:   r;   employee_ids)r&   offboardingstage_setallqsorder_byappendr$   r0   objectsfiltertitlestrr9   group_bygetobject_listoffboardingemployee_set)filtersoffboardingsgroupsr:   r<   r;   all_stages_grouperdatastagestage_employees	page_nameemployee_grouperemployeeordered_datagroupersfoundr=   s                    %/var/www/horilla/offboarding/views.pypipeline_grouperr_   >   s   F# -	$k>>BBD

"XXd^ 	  *brJ 	?E%%%&DE4#++22"4 3 
 b.)  ,s;>>/BBI'I&	 
 k  ",1,I,I,M,M,O% (% I "(^.>>DN%	?(  > 	8EE# 9%. ''0 E	
 ##Y$67	8 '"%

 	d[-^ M3%s   F"
c                 @    t        | d      }|j                  |      } | S )zA
    This method is used to generate common paginator limit.
       )r	   get_page)qrysetpage_number	paginators      r^   !paginator_qry_offboarding_limitedrf   s   s%     &!$I,FM    zoffboarding.view_offboardingT)offboarding_employee_can_enterc                    t               j                  }t        || j                  j	                  d            }t        i |      }|D ]  }t        |d   d|d           i }|D ]$  }t        |      |t        |j                        <   & t        | j                  j                               }t        | d||t               t               t               ||t        j                          j#                         d      S )z#
    Offboarding pipeline view
    rB   r:   r;   r:   z"offboarding/pipeline/pipeline.html)rR   paginated_offboardingsemployee_filterpipeline_filterstage_filterstage_formsfilter_dicttoday)r%   rF   rf   GETrN   r_   setattrr,   rL   r9   r   	urlencoder   r$   r&   r   rq   date)requestrR   rk   rS   itemro   r:   rp   s           r^   pipelinerx   |   s     "#&&L>gkkoof-
 b"89F ?]#XtH~>? K- T+:{+SC'(T 7;;0023K,"&<57-//1&&^^%**,		
 rg   c                    t        | j                        j                  }t        || j                  j	                  d            }t        | j                  |      }|D ]  }t        |d   d|d           i }|D ]$  }t        |      |t        |j                        <   & t        | d|||t        | j                  j                               d      S )z8
    This method is used filter offboarding process
    rB   r:   r;   rj   z&offboarding/pipeline/offboardings.html)rR   rk   ro   rp   )r%   rr   rF   rf   rN   r_   rs   r,   rL   r9   r   r   rt   )rv   rR   rk   rS   rw   ro   r:   s          r^   filter_pipelinerz      s     "'++.11L>gkkoof- gkk+ABF ?]#XtH~>?K- T+:{+SC'(T0"&<&#GKK$9$9$;<		
	 	rg   zoffboarding.add_offboardingc                    t        t        | j                  j                  d                  }d}|r>t	        |t
              r.t        j                  j                  |      j                         }t        |      }| j                  dk(  rt        | j                  |      }|j                         r|j                         }t        j                   | t#        d             |j$                  j'                         D cg c]  }|j(                   }}t+        j,                  | j.                  j0                  |ddd	d
ddt3        d      	       t5        d      S t7        | dd|i      S c c}w )z!
    Create offboarding view
    instance_idNr9   instancePOSTzOffboarding savedz(You are chosen as an offboarding manageruA   لقد تم اختيارك كمدير عملية المغادرةu.   Sie wurden als Offboarding-Manager ausgewähltz,Has sido elegido como gerente de offboardingu@   Vous avez été choisi comme responsable du processus de départpeople-circleoffboarding-pipeline	recipientverbverb_arverb_deverb_esverb_friconr   )<script>window.location.reload()</script>zoffboarding/pipeline/form.htmlform)r   rL   rr   rN   
isinstanceintr/   rI   rJ   firstr)   methodr   is_validsaver   success_managersrE   employee_user_idr   senduseremployee_getr   r
   r   )rv   r|   r   r   off_boardingrZ   userss          r^   create_offboardingr      s;     GKKOOM$B CDKHz+s3&&---=CCEH-D~~w||h?==?99;LWa(;&<=:F:O:O:S:S:U.6))E  KK))?[HFZ$ !78
   KLL(D	
 #s   =E'zoffboarding.delete_offboardingc                 X   	 t         j                  j                  |      }|j                          t	        j
                  | t        d             t        t              S # t         j                  t        f$ r0 t	        j                  | t        d             Y t        t              S w xY w)z4
    This method is used to delete offboardings
    r}   zOffboarding deletedzOffboarding not found)r/   rI   rN   deleter   r   r   DoesNotExistOverflowErrorerrorr   rz   )rv   r9   r:   s      r^   delete_offboardingr      s    <!))---4!$9":; O$$ $$m4 <w"9 :;O$$<s   AA   8B)(B)z offboarding.add_offboardingstagec                    | j                   d   }t        t        | j                   j                  d                  }d}|r0t	        |t
              r t        j                  j                  |      }t        j                  j                  |      }t        |      }||j                  _        | j                  dk(  rt        | j                  |      }|j                         r|j                  d      }||_        |j                          |j                   j#                  |j$                  j'                  d	             t)        j*                  | t-        d
             |j                   j/                         D cg c]  }|j0                   }}t3        j4                  | j6                  j8                  |ddddddt;        d      	       t=        d      S t?        | dd|i      S c c}w )z?
    This method is used to create stages for offboardings
    offboarding_idr|   Nr}   r~   r   Fcommitr   zStage savedz+You are chosen as offboarding stage manageruN   لقد تم اختيارك كمدير لمرحلة عملية المغادرةu8   Sie wurden als Manager der Offboarding-Phase ausgewähltz8Has sido elegido como gerente de la etapa de offboardingu?   Vous avez été choisi comme responsable de l'étape de départr   r   r   r   zoffboarding/stage/form.htmlr   ) rr   r   rL   rN   r   r   r3   rI   r/   r*   r   r   r   r   r   r   r   setrU   getlistr   r   r   rE   r   r   r   r   r   r   r
   r   )rv   r   r|   r   r:   r   rZ   r   s           r^   create_stager      s    [[!12NGKKOOM$B CDKHz+s3#++//;/?%%))^)<K2D#.DMM ~~#GLL8D==?yyy.H&1H#MMO!!$))"3"3J"?@Wa&67?G?P?P?T?T?VW8X..WEWKK))BhRRY$ !78
   KLL'864.II Xs   =G'z#offboarding.add_offboardingemployeec                 X   t        |       d   rt        |       d   nd}t        j                         t        |      z   }| j                  d   }t        t        | j                  j                  d                  }d}|r0t        |t              r t        j                  j                  |      }t        j                  j                  |      }t        ||d|	      }||j                  _        | j                   d
k(  rt        | j"                  |      }|j%                         r|j'                  d      }||_        |j'                          t)        j*                  | t-        d             |st/        j0                  | j2                  j4                  |j6                  j8                  d| d|j:                   d| d|j:                   d| d|j:                   dd| d|j:                   d| d|j:                   t=        d      d	       t?        d      S tA        | dd|i      S )z:
    This method is used to add employee to the stage
    get_initial_notice_periodr   daysr?   r|   Nr}   )r?   notice_period_endsinitialr   r   r~   Fr   zEmployee savedzYou have been added to the z of u"   لقد تمت إضافتك إلى u    من zDu wurdest zu z von u    hinzugefügtu   Has sido añadido a z de u   Vous avez été ajouté à r   informationr   r   r   r   r   r   r   r   r   zoffboarding/employee/form.htmlr   )!r   r   rq   r   rr   r   rL   rN   r   r   r0   rI   r3   r(   r   r?   r   r   r   r   r   r   r   r   r   r   r   employee_idr   r   r   r
   r   )rv   default_notice_periodend_dater?   r|   r   rV   r   s           r^   add_employeer   &  s     ()DE 	W%&AB 
 ~~)1F"GGH{{:&HGKKOOM$B CDKHz+s3&..22k2B$$((H(5E""(ChD #DMM~~&w||hG==?yyy.H %HMMOWa(8&9:LL--&22CC6ugT%BVBVAWX@veNbNbMcd,UG59M9M8Nm\25'e>R>R=ST9%UEYEYDZ[$%;<&
   KLL';fd^LLrg   z&offboarding.delete_offboardingemployeec                 (   | j                   j                  d      }t        j                  j	                  |      }|r|j                          t        j                  | t        d             t        j                  | j                  j                  t        j                  j	                  |j                  dd            ddd	d
dt        d      d	       t#        t$              S t        j                   | t        d             t#        t$              S )z@
    This method is used to delete the offboarding employee
    rC   id__inzOffboarding employee deletedemployee_id__employee_user_idTflatz*You have been removed from the offboardingu7   لقد تمت إزالتك من إنهاء الخدمةz'Du wurdest aus dem Offboarding entferntz"Has sido eliminado del offboardingu(   Vous avez été retiré de l'offboardingr   r   r   zEmployees not found)rr   r   r0   rI   rJ   r   r   r   r   r   r   r   r   r   values_listr   r   r   rz   )rv   rC   	instancess      r^   delete_employeer   S  s     ;;&&~6L#++22,2GI!$B"CDLL%%ll)) ,,-LSW,X *  >M=8>34	
 O$$ 	w"7 89O$$rg   z#offboarding.delete_offboardingstagec                    | j                   j                  d      }	 t        j                  j	                  |      }|r0|j                          t        j                  | t        d             nt        j                  | t        d             t        d      S # t        $ r, t        j                  | t        d             Y t        d      S w xY w)z>
    This method  is used to delete the offboarding stage
    idsr   zStage deletedzStage not foundr   )rr   r   r3   rI   rJ   r   r   r   r   r   r   r
   )rv   r   r   s      r^   delete_stager   p  s     ++

e
$C6$,,3333?	Wa&89NN7A&7$89 CDD  6w"3 45CDD6s   A1B (CCzoffboarding.change_offboardingc                 4   | j                   j                  d      }| j                   d   }t        j                  j	                  |      }t
        j                  j                  |      }|D ]  }||_        |j                           i }t        |j                        |t        |j                  j                        <   t        j                  | j                  j                   t"        j                  j	                  |j%                  dd            d	d
dddt'        d      d	       t)        i |j                  g      }|D ]  }t+        |d   d|d           t-        | d|d   |t/        d      t1        j2                         j5                         d      S )zB
    This method is used to update the stages of the employee
    rC   r?   r   r}   rj   r   Tr   z"Offboarding stage has been changedu2   تم تغيير مرحلة إنهاء الخدمةu%   Die Offboarding-Stufe wurde geändertz&Se ha cambiado la etapa de offboardingu'   L'étape d'offboarding a été changéer   r   r   r:   r;   'offboarding/stage/offboarding_body.htmlr   zstage changed successfully.r:   ro   response_messagerq   )rr   r   r0   rI   rJ   r3   rN   r?   r   r,   r   rL   r9   r   r   r   r   r   r   r   r_   rs   r   r   r   rq   ru   )	rv   rC   r?   r<   rV   rZ   ro   rS   rw   s	            r^   change_stager     s    ;;&&~6L{{:&H#++22,2GI$$((H(5E  ! K0?((1KE((++,- KK!!,,%%(()Ht(T & 
 2D789/0 b5#7#7"89F ?]#XtH~>?1!!9& !"? @^^%**,		
	 	rg   z offboarding.view_offboardingnotec                    | j                   r| j                   j                  d      }| j                  d   }t        j                  j                  |      }g }|D ]4  }t               }||_        |j                          |j                  |       6  |j                  j                  |  |}t        j                  j                  |      }	t        | dd|	i      S )zE
    This method is used to render all the notes of the employee
    filesnote_idr}    offboarding/note/view_notes.htmlrZ   )FILESr   rr   r2   rI   rN   r4   
attachmentr   rH   attachmentsaddr0   r   )
rv   r   r   r   noter   filer   offboarding_employee_idrZ   s
             r^   
view_notesr     s     }}%%g.++i(&&**g*6 	+D57J$(J!OOz*		+
 	k*)"**..2I.JH*	
 rg   c                    | j                   d   }t        j                  j                  |      }t	               }| j
                  dk(  rt	        | j                  | j                        }||j                  _	        |j                         rF|j                          t        j                  | t        d             t        d|j                         S t#        | d||d      S )	zI
    This method is used to create note for the offboarding employee
    r   r}   r   zNote added successfullyzview-offboarding-noter   r   )r   rZ   )rr   r0   rI   rN   r'   r   r   r   r   r   r   r   r   r   r   r   r9   r   )rv   r   rZ   r   s       r^   add_noter     s     ++m,K"**..+.>H:D~~gmm4$,!==?IIKWa(A&BC3MM* 	
 rg   z"offboarding.delete_offboardingNote)permc                 D   d}	 t         j                  j                  |      }|j                          t	        j
                  | t        d             t        |      S # t         j                  $ r. t	        j                  | t        d             d}Y t        |      S w xY w)z<
    This method is used to delete the offboarding note
     r}   z'The note has been successfully deleted.zNote not found.r   )
r2   rI   rN   r   r   r   r   r   r   r
   )rv   r   scriptr   s       r^   offboarding_note_deleter     s     F=&&**g*6!$M"NO
 	 '' =w"3 45<	=s   AA 4BBz"offboarding.delete_offboardingnotec                     d}| j                   j                  d      }t        j                  j	                  |      j                          t        j                  | t        d             t        |      S )z#
    Used to delete attachment
    r   r   r   zFile deleted successfully)
rr   r   r4   rI   rJ   r   r   r   r   r
   )rv   r   r   s      r^   delete_attachmentr     s^     F
++

e
$C ((//s/;BBDWa ;<=rg   zoffboarding.add_offboardingtaskc                 D   | j                   j                  d      }t        t        | j                   j                  d                  }t        j
                  j                  |      }d}|r.t        j
                  j                  |      j                         }t        ||d|      }| j                  dk(  rYt        | j                  |d|i	      }|j                         r/|j                          t        j                  | t!        d
             t#        | dd|i      S )z6
    This method is used to add offboarding tasks
    r?   r|   )r?   Nr}   )r?   tasks_tor   r   )r   r   z
Task Addedzoffboarding/task/form.htmlr   )rr   rN   r   rL   r0   rI   rJ   r5   r   r-   r   r   r   r   r   r   r   r   )rv   r?   r|   r<   r   r   s         r^   add_taskr     s     {{z*HGKKOOM$B CDK#++22H2EIH"**11[1AGGI !
 D ~~LLH
 ==?IIKWao6$D	
 rg   zoffboarding.change_employeetaskc                    | j                   d   }| j                   j                  d      }| j                   d   }| j                   d   }t        j                  j	                  ||      }|j                  |       t        j                  | j                  j                  t        j                  j	                  |j                  dd	      
      dddddt        d      d	       t        j                  j                  |      }i }	t        |j                         |	t#        |j                   j$                        <   t'        i |j                   g      }
|
D ]  }t)        |d   d|d           t+        | d|
d   |	t-        d      d      S )zA
    This method is used to update the assigned tasks status
    r?   rC   task_idtask_status)employee_id__id__intask_id__id)status#task_id__managers__employee_user_idTr   r   z(Offboarding Task status has been updatedu9   تم تحديث حالة مهمة إنهاء الخدمةz5Der Status der Offboarding-Aufgabe wurde aktualisiertz6Se ha actualizado el estado de la tarea de offboardingu8   Le statut de la tâche d'offboarding a été mis à jourr   r   r   r}   rj   r:   r;   r   r   z!Task status changed successfully.)r:   ro   r   )rr   r   r.   rI   rJ   updater   r   r   r   r   r   r   r3   rN   r,   r   rL   r9   r_   rs   r   r   )rv   argskwargsr?   rC   r   r   employee_taskrV   ro   rS   rw   s               r^   update_task_statusr   7  s    {{:&H;;&&~6Lkk)$G[['F ((//(g 0 M '
KK!!,,%% ,,5D -  & 

 8KGHJ/0 $$((H(5EK0?((1KE((++,- b5#7#7"89F ?]#XtH~>?1!!9& !"E F	
 rg   zoffboarding.add_employeetaskc           	         | j                   j                  d      }| j                   d   }t        j                  j	                  |      }t
        j                  j                  |      }|D ]+  }	 t               }||_        ||_	        |j                          - |j                         j                  j                  }i }t        |      |t        |j                         <   t#        i |j                  j                  g      }	|	D ]  }
t%        |
d   d|
d           t'        | d|	d	   |t)        d
      t+        j,                         j/                         d      S #  Y xY w)z9
    This method is used to assign task to employees
    rC   r   r   r}   rj   r:   r;   r   r   zTask Assignedr   )rr   r   r0   rI   rJ   r5   rN   r.   r   r   r   r   r?   r   r,   rL   r9   r_   rs   r   r   r   rq   ru   )rv   rC   r   r<   taskrZ   assigned_taskr:   ro   rS   rw   s              r^   task_assignr   i  sJ    ;;&&~6Lkk)$G#++22,2GI""&&'&2D 	(NM(0M%$(M!  //#,,;;KK'6;'OKKNN#$b4==#?#?"@AF ?]#XtH~>?1!!9& !/ 2^^%**,		
	 		s   1(EE z"offboarding.delete_offboardingtaskc                 T   | j                   j                  d      }t        j                  j	                  |      }|r>|j                          t        j                  | t        d             t        t              S t        j                  | t        d             t        t              S )z0
    This method is used to delete the task
    task_idsr   zTask deletedzTask not found)rr   r   r5   rI   rJ   r   r   r   r   r   r   rz   )rv   r   taskss      r^   delete_taskr     s     {{"":.H##**(*;E!N"34 O$$ 	w"2 34O$$rg   c                 h   t         j                  j                  |      }t        j                  j	                  |      }i }t
        j                  j	                  |j                  j                        }t        |j                  j                        |t        |j                  j                  j                        <   ||t        j                  ||d}| j                  j                  d      }|r3t        j                  |      }t        ||      \  }	}
||d<   |	|d<   |
|d<   t!        | d	|      S )
z
    This method is used to get the individual view of the offboarding employees
    parameters:
        emp_id(int): the id of the offboarding employee
    r}   r   )r   rj   )rZ   r   choicesoffboarding_stagesro   requests_idspreviousnextz)offboarding/pipeline/individual_view.html)r0   rI   rN   r.   rJ   r3   r?   r   r,   rL   r9   statusesrr   jsonloadsr   r   )rv   emp_idrZ   r   ro   r   contextrequests_ids_jsonr   previous_idnext_ids              r^   offboarding_individual_viewr    s!    #**..&.9H  ''F';EK)1188((77 9  =L%%44=KH%%447789 ((0"G  7zz"34.|VDW"3)
!'FPPrg   "offboarding.view_resignationletterresignation_requestc           
      $   ddi}t               }t        j                  j                         }t        j                  j                         }t        | dt        || j                  j                  d            |ddgi|t        j                  d      S )z=
    This method is used to view the resignation request
    r   	requestedz*offboarding/resignation/requests_view.htmlrB   	Requested)lettersfrp   rR   	gp_fields)r"   r6   rI   rE   r/   r   r   rr   rN   r#   fields)rv   defatul_filterfilter_instancer	  rR   s        r^   request_viewr    s     ,N"nO''++-G&&**,L4$Wgkkoof.EF ${m4(&--	

 
rg   c                    t         j                  j                  |      }d|i}| j                  j                  d      }|r3t	        j
                  |      }t        ||      \  }}||d<   ||d<   ||d<   t        | d|      S )Nr}   letterr   r   r   z0offboarding/resignation/request_single_view.html)r6   rI   rN   rr   r   r   r   r   )rv   r9   r  r   r   r   r  r  s           r^   request_single_viewr    s     &&**b*1F&G  7zz"34.|R@W"3)
!: rg   c                 8   | j                   j                  d      r t        | j                        j                  }n*t
        j                  j                  | j                         }| j                  j                  d      }t        | j                  j                               }d}| j                  j                  d      dk(  rd}| j                  j                  d      rt        | |d      }|j                  d       |d	k7  r|t        ||| j                  j                  d
      d
      }|D cg c]  }|d   	 }}g }|D ].  }|j                  D ]  }	|j                  |	j                           0 t#        j$                  t'        |            }
d}n\t)        || j                  j                  d
            }t#        j$                  |j                  D 	cg c]  }	|	j                    c}	      }
| j                  j                  d      r|j                  d       | j*                  j                  d      r,| j*                  j                  d      j-                  d      rdnd}t/        | |||| j                  j                         ||
|d      S c c}w c c}	w )z9
    This method is used to search/filter the letter
    r  )r   fieldz*offboarding/resignation/request_cards.htmlviewr>   z)offboarding/resignation/request_list.htmlr   r   rB   z%offboarding/resignation/group_by.htmlHTTP_REFERERemployee-profile/FT)r	  rp   pd
paginationr   r  )r   has_permr"   rr   rF   r6   rI   rJ   rN   r   rt   r   poprM   rO   rH   r9   r   dumpsr>   r   METAendswithr   )rv   r	  r  	data_dicttemplateentrylist_valuesid_listvaluer   r   r  s               r^   search_resignation_requestr%    s2    ||ABw{{+..#++22*1,, 3 
 KKOOG$E..01I;H{{v&(>{{x '84h{u(7E7;;??6+BFK29:uV}::  	,E!-- ,x{{+,	, zz$w-0:  )@Azzw?R?R"S88;;"ST{{vf <<N+LL^,556IJ 	 	  $++'')$(	
 + ; #Ts   1JJc                    | j                   j                  d      }t        j                  j	                  |      j                          t        j                  | t        d             | j                  j                  d      r5| j                  j                  d      j                  d      rt        d      S t        t              S )zC
    This method is used to delete resignation letter instance
    
letter_idsr   zResignation letter deletedr  r  z/employee/employee-profile/)rr   r   r6   rI   rJ   r   r   r   r   r  rN   r  r   r  )rv   r   s     r^   delete_resignation_requestr(  *  s     ++

l
+C$$C$0779Wa <=>||'GLL,<,<^,L,U,U- 566%%rg   c                    t        t        | j                  j                  d                  }d}|r t        j
                  j                  |      }t        |      }| j                  dk(  rat        | j                  |      }|j                         r:|j                          t        j                  | t        d             t        d      S t        | dd	|i      S )
zK
    This method is used to render form to create resignation requests
    r|   Nr}   r~   r   zResignation letter savedr   z!offboarding/resignation/form.htmlr   )r   rL   rr   rN   r6   rI   r+   r   r   r   r   r   r   r   r
   r   )rv   r|   r   r   s       r^   create_resignation_requestr*  ;  s      GKKOOM$B CDKH$,,00K0@ (3D~~$W\\HE==?IIKWa(B&CD KLL'>OOrg   z$offboarding.change_resignationletterc                    | j                   j                  d      }| j                   d   }| j                   j                  d      }t        j                  d      r%t        dd      j                  j                         nd}|rt        j                  j                  |      }| j                   j                  d	      }| j                   j                  d
      }|r$t        j                  |d      j                         }t        j                         }|r%t        j                  |d      j                         }nd}|r|t        |j                        z   }|s|}t        j                  j!                  |      }	|dv r|	D ]  }
||
_        |
j%                          |dk(  r|
j'                         t)        j*                  | d|
j-                                 t/        j0                  | j2                  j4                  |
j6                  j8                  d|
j-                          d|
j-                          dd|
j-                          d|
j-                          d|
j-                          dd	        t;        t<              S )zH
    This method is used to update the status of resignation letter
    r'  r   r   payrollpayrollgeneralsetting	app_labelmodelNr}   notice_period_startsr   %Y-%m-%dr   r   )approvedrejectedr3  zResignation request has been u   تم u    طلب الاستقالةu   Der Rücktrittsantrag wurde z!La solicitud de renuncia ha sido u!   La demande de démission a été #r   r   )rr   r   rN   r   is_installedr   rI   r   r/   r   strptimeru   rq   r   notice_periodr6   rJ   r   r   to_offboarding_employeer   r   get_status_displayr   r   r   r   r   r   r   r  )rv   r   r   r   default_notice_endr:   r1  r   rq   r	  r  s              r^   update_statusr<  P  s`    ++

l
+C[["F[[__%56N
 Y' 	 '>	

'%%'  !))---@&{{/EF$[[__-AB#+#4#4$j$df !  !)!2!2"J"df  "&!%9I+99= &" $#( ''..c.:G)) 	F"FMKKM#..!57I 89R9R9T8UV KK)) ,,==4V5N5N5P4QR 9 9 ;<<VW6v7P7P7R6ST;F<U<U<W;XY;F<U<U<W;XY"
	* L!!rg   z)offboarding.add_offboardinggeneralsettingc                    t         j                  j                         }|r|n	t               }d| j                  j	                         v |_        |j                          |j
                  rdnd}t        j                  | t        d      j                  |             | j                  j                  d      rt        d      S t        t              S )z3
    Enable disable resignation letter feature
    r  enableddisabledz5Resignation Request setting has been {} successfully.HTTP_HX_REQUESTaK  
                            <span hx-trigger="load"
                            hx-get="/"
                            hx-swap="outerHTML"
                            hx-select="#offboardingGenericNav"
                            hx-target="#offboardingGenericNav">
                            </span>
                            )r1   rI   r   rr   keysr  r   r   r   r   formatr  rN   r
   r   r   )rv   resignation_request_featuremessage_texts      r^   enable_resignation_requestrE    s     #<"C"C"I"I"K ' 	$&(   	!1!1!33  3  $$&0DD	*  	
ABII,W ||)* 	
 		
 $%%rg   c                 6   | j                   d   }t        j                  d      rt        dd      }|j                  j                  |d      j                         r9|j                  j                  d      j                  |      j                         n*|j                  j                  |d      j                         }nd	}t        |       d
   dt        t        j                         j                               d}|r|j                  |d<   t        |      S )zF
    This method is used to get initial details for notice period
    r   r,  contractr.  active)employee_id__idcontract_statusz-id)rI  Nr   month)r8  unitr1  r8  )rr   r   r6  r   rI   rJ   r   rG   r   rL   r   rq   ru   notice_period_in_daysr   )rv   r   Contractemployee_contractresponses        r^   get_notice_periodrQ    s    ++m,K#*YjQ && +X ' eg	   ))%04
 !!(( +X ) eg 	 ! .g67RS #HNN$4$9$9$; <H
 $5$K$K!!!rg   c                     | j                   j                  d      }t        j                  |d      j	                         }t        |       d   }|t        |      z   }d|i}t        |      S )zd
    Calculates and returns the end date of the notice period based on the provided start date.
    
start_dater2  r   r   r   )rr   rN   r   r7  ru   r   r   r   )rv   rS  r8  r   rP  s        r^   get_notice_period_end_daterT    si     .J"":z:??AJ(12MNMI=99HHH !!rg   )N)ir   r   r   urllib.parser   django.appsr   django.contribr   django.contrib.auth.modelsr   django.core.paginatorr	   django.httpr
   r   django.shortcutsr   r   django.urlsr   django.utils.translationr   r   base.context_processorsr   base.methodsr   r   r   r   
base.viewsr   employee.modelsr   horilla.decoratorsr   r   r   r   horilla.group_byr   rM   horilla.methodsr   notifications.signalsr   offboarding.decoratorsr   r   r    r!   offboarding.filtersr"   r#   r$   r%   r&   offboarding.formsr'   r(   r)   r*   r+   r,   r-   offboarding.modelsr.   r/   r0   r1   r2   r3   r4   r5   r6   r_   rf   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r%  r(  r*  r<  rE  rQ  rT   rg   r^   <module>rk     sr    ( !  # + + 2 -  6 8 N N ' $  ; 3 (    
 
 
  b 2j "4# #L "4  
6 23% 4  %P 56
% 7 
% AB!J C !JH <=(M > (MV =>% ? %6 :;E < E" 78. 9  .b &t  
6  0 <=  >    9:  ;   '(IJ" K "J %d+ +\ 56 7 D '(LM% N % Q  QB 9:,- . ; , 9: ; & ,-6 .  6r ,-& . & ,-P .  P$ ,-;<=" = . ="@ @A & B   &F :;" < "B"rg   