
    vg                     x   d dl 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 d d	lmZ d d
lmZ d dlmZ d dlmZ d dl d dl 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#  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+ G d$ d%e      Z, G d& d'e      Z- G d( d)e      Z. G d* d+e      Z/ G d, d-e      Z0 G d. d/e      Z1 G d0 d1e      Z2 G d2 d3e      Z3 G d4 d5e      Z4 G d6 d7e      Z5 G d8 d9e      Z6 G d: d;e      Z7 G d< d=e      Z8 G d> d?e      Z9 G d@ dAe      Z: G dB dCe      Z; G dD dEe      Z< G dF dGe      Z= G dH dIe      Z> G dJ dKe      Z? G dL dMe      Z@ G dN dOe      ZAy)P    N)permission_required)AnonymousUser)Count)Http404	QueryDict)method_decorator)DjangoFilterBackend)PageNumberPagination)IsAuthenticatedResponse)APIView)filtersubordinates)*) filter_conditional_leave_request)LeaveRequest)notify   )manager_permission_required)groupby_querysetc                       e Zd ZegZd Zy) EmployeeAvailableLeaveGetAPIViewc                     |j                   j                  }|j                  j                         }t	               }|j                  ||      }t        |d      }|j                  |j                        S )NTmany)	useremployee_getavailable_leaveallr
   paginate_querysetGetAvailableLeaveTypeSerializerget_paginated_responsedata)selfrequestemployeer   	paginatorpage
serializers          5/var/www/horilla/horilla_api/api_views/leave/views.pygetz$EmployeeAvailableLeaveGetAPIView.get   s`    <<,,"22668(*	**?GD4TE
//
@@    N__name__
__module____qualname__r   permission_classesr+    r,   r*   r   r      s    )*Ar,   r   c                   (    e Zd ZegZegZeZd Z	d Z
y)$EmployeeLeaveRequestGetCreateAPIViewc                    |j                   j                  }|j                  j                         j	                  d      }| j                  |j                  |      }t               }|j                  j                  dd       }|r(|j                         }t        ||||j                        S |j                  |j                  |      }t        |d      }	|j                  |	j                        S N-idquerysetgroupby_fieldTr   )r   r   leaverequest_setr   order_byfilterset_classGETr
   r+   build_absolute_urir   qsr     userLeaveRequestGetAllSerilaizerr"   r#   )
r$   r%   r&   leave_request	filtersetr'   
field_nameurlr(   r)   s
             r*   r+   z(EmployeeLeaveRequestGetCreateAPIView.get*   s    <<,, 11557@@G((}(M	(*	[[___d;
,,.C#GS*illKK**9<<A5dF
//
@@r,   c                    |j                   j                  j                  }|j                  }t	        |t
              r|j                         }||d<   |j                  d      s|j                  d      n|j                  d      |d<   t        |      }|j                         r|j                         }t        j                  t              5  t        j                  |j                   j                  |j                   j"                  j$                  j&                  ddddd	d
d|j                   d|j                   d
       d d d        t)        t+        |      j                  d      S t)        |j,                  d      S # 1 sw Y   @xY w)Nemployee_idend_date
start_dater#   z)You have a new leave request to validate.u?   لديك طلب إجازة جديد يجب التحقق منه.z3Sie haben eine neue Urlaubsanfrage zur Validierung.z6Tiene una nueva solicitud de permiso que debe validar.u4   Vous avez une nouvelle demande de congé à valider.people-circle/leave/request-view?id=/api/leave/request//		recipientverbverb_arverb_deverb_esverb_friconredirectapi_redirect   status  )r   r   idr#   
isinstancer   dictr+   "LeaveRequestCreateUpdateSerializeris_validsave
contextlibsuppress	Exceptionr   sendrG   employee_work_inforeporting_manager_idemployee_user_idr   rA   errors)r$   r%   rG   r#   r)   rB   s         r*   postz)EmployeeLeaveRequestGetCreateAPIView.post7   sP   ll//22||dI&99;D)]*.((:*>DHH\"DHHZDX 	Z 8TB
 &OO-M$$Y/ LL--+77JJ__ppD]QTR(6}7G7G6HI#6}7G7G6H!J 0?DDS  
))#66! s   A7FFN)r.   r/   r0   r   r1   r	   filter_backendsUserLeaveRequestFilterr=   r+   rk   r2   r,   r*   r4   r4   %   s#    )**+O,OA7r,   r4   c                   *    e Zd ZegZd Zd Zd Zd Zy)'EmployeeLeaveRequestUpdateDeleteAPIViewc                     	 t         j                  j                  ||j                  j                        S # t         j
                  $ r}t        j                  |      d }~ww xY w)N)pkrG   )r   objectsr+   r   r   DoesNotExistserializersValidationError)r$   r%   rq   es       r*   get_leave_requestz9EmployeeLeaveRequestUpdateDeleteAPIView.get_leave_requestY   s]    	1''++7<<#<#< ,   (( 	1--a00	1s   47 A$
AA$c                 j    | j                  ||      }t        |      }t        |j                  d      S N   rZ   )rw   UserLeaveRequestGetSerilaizerr   r#   r$   r%   rq   rB   r)   s        r*   r+   z+EmployeeLeaveRequestUpdateDeleteAPIView.geta   s/    ..w;2=A

44r,   c                 f   | j                  ||      }|j                  j                  }|j                  dk(  r|j                  |k(  r|j
                  }t        |t              r|j                         }|j                  |d<   |j                  d      s|j                  d      n|j                  d      |d<   t        ||      }|j                         r0|j                         }t        t        |      j
                  d      S t        |j                   d      S t"        j%                  d	d
i      )N	requestedrG   rH   rI   rJ   rY   rZ   r\   errorAccess Denied..)rw   r   r   r[   rG   r#   r^   r   r_   r]   r+   r`   ra   rb   r   r{   rj   rt   ru   )r$   r%   rq   rB   rG   r#   r)   s          r*   putz+EmployeeLeaveRequestUpdateDeleteAPIView.putf   s   ..w;ll//  K/))[8<<D$	*yy{"-..D xx
+ &XXj) 
 <MPTUJ""$ * 11-@EEc  J--c::))74E*FGGr,   c                     | j                  ||      }|j                  j                  }|j                  dk(  r.|j                  |k(  r|j                          t        ddid      S t        j                  ddi      )Nr~   messagez$Leave request deleted successfully..rz   rZ   r   r   )	rw   r   r   r[   rG   deleter   rt   ru   r$   r%   rq   rB   rG   s        r*   r   z.EmployeeLeaveRequestUpdateDeleteAPIView.delete   s|    ..w;ll//  K/))[8  "BCC  ))74E*FGGr,   N)	r.   r/   r0   r   r1   rw   r+   r   r   r2   r,   r*   ro   ro   V   s!    )*15
H2Hr,   ro   c                   R    e Zd ZegZegZeZd Z	 e
 edd      d      d        Zy)	LeaveTypeGetCreateAPIViewc                    t         j                  j                         }| j                  |j                  |      }t               }|j                  |j                  |      }t        |d      }|j                  |j                        S )Nr8   Tr   )	LeaveTyperr   r   r=   r>   r
   r    r@   LeaveTypeAllGetSerializerr"   r#   )r$   r%   
leave_typerC   r'   r(   r)   s          r*   r+   zLeaveTypeGetCreateAPIView.get   sn    &&**,
((z(J	(*	**9<<A.t$?
//
@@r,   leave.add_leavetypeTraise_exceptiondispatchnamec                     t        |j                        }|j                         r'|j                          t	        |j                  d      S t	        |j
                  d      S NrJ   rY   rZ   r\   )LeaveTypeGetCreateSerilaizerr#   ra   rb   r   rj   r$   r%   r)   s      r*   rk   zLeaveTypeGetCreateAPIView.post   sL    
 2w||D
 OOJOOC88
))#66r,   N)r.   r/   r0   r   r1   r	   rl   LeaveTypeFilterr=   r+   r   r   rk   r2   r,   r*   r   r      sE    )**+O%OA 14H7	7r,   r   c                       e Zd ZegZd Z e edd      d      d        Z e edd      d      d	        Z	 e ed
d      d      d        Z
y)LeaveTypeGetUpdateDeleteAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wN)rq   )r   rr   r+   rs   rt   ru   r$   rq   rv   s      r*   get_leave_typez.LeaveTypeGetUpdateDeleteAPIView.get_leave_type   sH    	1$$((B(//%% 	1--a00	1   " AA

Azleave.view_leavetypeTr   r   r   c                 h    | j                  |      }t        |      }t        |j                  d      S ry   )r   r   r   r#   r$   r%   rq   r   r)   s        r*   r+   z#LeaveTypeGetUpdateDeleteAPIView.get   s/    
 ((,
1*=

44r,   zleave.change_leavetypec                     | j                  |      }t        ||j                        }|j                         r'|j	                          t        |j                  d      S t        |j                  d      S r   )r   r   r#   ra   rb   r   rj   r   s        r*   r   z#LeaveTypeGetUpdateDeleteAPIView.put   s^    
 ((,
1*7<<P
 OOJOOC88
))#66r,   zleave.delete_leavetypec                 \    | j                  |      }|j                          t        d      S )NrY   rZ   )r   r   r   )r$   r%   rq   r   s       r*   r   z&LeaveTypeGetUpdateDeleteAPIView.delete   s+    
 ((,
s##r,   N)r.   r/   r0   r   r1   r   r   r   r+   r   r   r2   r,   r*   r   r      s    )*1 2DI5	5
 4dK7	7 4dK$	$r,   r   c                   D    e Zd ZegZegZeZd Z	 e
d      d        Zd Zy)&LeaveAllocationRequestGetCreateAPIViewc                 T    |j                   }t        |t              rt        d      |S Nr   r   r^   r   r   r$   r%   r   s      r*   get_userz/LeaveAllocationRequestGetCreateAPIView.get_user   %    ||dM*/**r,   !leave.view_leaveallocationrequestc                    t         j                  j                         j                  d      }t	        ||d      }| j                  |j                  |      }t               }|j                  j                  dd       }|r(|j                         }t        ||||j                        S |j                  |j                  |      }t        |d      }	|j                  |	j                        S )Nr7   r   r8   r:   Tr   )LeaveAllocationRequestrr   r   r<   r   r=   r>   r
   r+   r?   r   r@   r    #LeaveAllocationRequestGetSerializerr"   r#   )
r$   r%   allocation_requestsr9   rC   r'   rD   rE   r(   r)   s
             r*   r+   z*LeaveAllocationRequestGetCreateAPIView.get   s    4<<@@BKKER%(*M
 ((x(H	(*	[[___d;
,,.C#GS*illKK**9<<A8DI
//
@@r,   c                 J   |j                   }| j                  |      j                  j                  }t	        |t
              r|j                         }||d<   t        |      }|j                         r|j                         }t        j                  t              5  t        j                  |j                  j                  |j                   j"                  j$                  j&                  d|j                    dd|j                    dd|j                    dd|j                    dd|j                    dd	d
|j                   d|j                   d
       d d d        t)        t+        |      j                   d      S t)        |j,                  d      S # 1 sw Y   @xY w)N
created_byrJ   z)New leave allocation request created for .u;   تم إنشاء طلب تخصيص إجازة جديد لـ u0   Neue Anfrage zur Urlaubszuweisung erstellt für u7   Nueva solicitud de asignación de permisos creada para u5   Nouvelle demande d'allocation de congé créée pour zpeople-ciclez(/leave/leave-allocation-request-view?id=z/api/leave/allocation-request/rN   rO   rY   rZ   r\   )r#   r   r   r]   r^   r   r_   &LeaveAllocationRequestCreateSerializerra   rb   rc   rd   re   r   rf   r   rG   rg   rh   ri   r   r   rj   )r$   r%   r#   rG   r)   allocation_requests         r*   rk   z+LeaveAllocationRequestGetCreateAPIView.post   s   ||mmG,99<<dI&99;D(\;F
 !+!2$$Y/ LL--0<<OOdduuDEWEcEcDddefYZlZxZxYyyz{NOaOmOmNnnopUVhVtVtUuuvwSTfTrTrSsstu'GHZH]H]G^_#ABTBWBWAXXY!Z 34FGLLUX  
))#66! s   B=FF"N)r.   r/   r0   r   r1   r	   rl   LeaveAllocationRequestFilterr=   r   r   r+   rk   r2   r,   r*   r   r      s?    )**+O2O !!DEA FA7r,   r   c                   l    e Zd ZegZd Z ed      d        Z ed      d        Z ed      d        Z	y)	,LeaveAllocationRequestGetUpdateDeleteAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   r   rr   r+   rs   rt   ru   r   s      r*   get_leave_allocation_requestzILeaveAllocationRequestGetUpdateDeleteAPIView.get_leave_allocation_request	  H    	1)11555<<%22 	1--a00	1r   r   c                 h    | j                  |      }t        |      }t        |j                  d      S ry   )r   r   r   r#   r$   r%   rq   r   r)   s        r*   r+   z0LeaveAllocationRequestGetUpdateDeleteAPIView.get  s/    !>>rB89KL

44r,   #leave.change_leaveallocationrequestc                 L   | j                  |      }|j                  dk(  rnt        ||j                        }|j	                         r0|j                         }t        t        |      j                  d      S t        |j                  d      S t        j                  ddi      )Nr~   rJ   rY   rZ   r\   r   r   )r   r[    LeaveAllocationRequestSerilaizerr#   ra   rb   r   r   rj   rt   ru   r   s        r*   r   z0LeaveAllocationRequestGetUpdateDeleteAPIView.put  s    !>>rB$$39"J ""$%/__%6"78JKPP  J--c::))74E*FGGr,   z#leave.delete_leaveallocationrequestc                     | j                  |      }|j                  dk(  r|j                          t        d      S t        j                  ddi      Nr~   rz   rZ   r   r   )r   r[   r   r   rt   ru   r$   r%   rq   r   s       r*   r   z3LeaveAllocationRequestGetUpdateDeleteAPIView.delete%  sO    !>>rB$$3%%'3''))74E*FGGr,   N)
r.   r/   r0   r   r1   r   r   r+   r   r   r2   r,   r*   r   r     se    )*1 !!DE5 F5
 !!FGH HH !!FGH HHr,   r   c                   |    e Zd ZegZegZeZ e	 e
dd      d      d        Z e	 e
dd      d      d        Zy	)
AssignLeaveGetCreateAPIViewleave.view_availableleaveTr   r   r   c                    t         j                  j                         j                  d      }t	        ||d      }| j                  |j                  |      }t               }|j                  j                  dd       }|r(|j                         }t        ||||j                        S |j                  |j                  |      }t        |d      }	|j                  |	j                        S )Nr7   r   r8   r:   Tr   )AvailableLeaverr   r   r<   r   r=   r>   r
   r+   r?   r   r@   r    AssignLeaveGetSerializerr"   r#   )
r$   r%   r   r9   rC   r'   rD   rE   r(   r)   s
             r*   r+   zAssignLeaveGetCreateAPIView.get4  s    
 )00446??F%_&A
 ((x(H	(*	[[___d;
,,.C#GS*illKK**9<<A-d>
//
@@r,   zleave.add_availableleavec                    t        |j                        }|j                         r|j                  j	                  d      }|j                  j	                  d      }|D ]  }|D ]  }t
        j                  j                  ||      j                         r3t
        j                  j                  |||j                         t        j                  t              5  t        j                  |j                   j"                  |j$                  dddd	d
ddd
       d d d          t'        d      S t'        |j(                  d      S # 1 sw Y   xY w)NrJ   employee_idsleave_type_idsrG   leave_type_id)rG   r   available_daysz!New leave type is assigned to youu/   تم تعيين نوع إجازة جديد لكz)Dir wurde ein neuer Urlaubstyp zugewiesenz*Se te ha asignado un nuevo tipo de permisou0   Un nouveau type de congé vous a été attribuérK   z/leave/user-request-view/api/leave/user-request/rO   rY   rZ   r\   )AssignLeaveCreateSerializerr#   ra   validated_datar+   r   rr   filterexistscreate
total_daysrc   rd   re   r   rf   r   r   ri   r   rj   )r$   r%   r)   r   r   rG   r   s          r*   rk   z AssignLeaveGetCreateAPIView.postG  sA   
 1gllC
 %4488HL'66::;KLN+ %3 M)1188$/} 9 fh '..55(3*7+8+C+C 6 
 (00; "KK ' 9 9*5*F*F%H(Y(S(T(Z%4)C-G . 3''
))#66 s   >E

EN)r.   r/   r0   r   r1   r	   rl   AssignedLeaveFilterr=   r   r   r+   rk   r2   r,   r*   r   r   .  sf    )**+O)O7NA	A 6M7	7r,   r   c                       e Zd ZegZd Z e edd      d      d        Z e edd      d      d	        Z	 e ed
d      d      d        Z
y)!AssignLeaveGetUpdateDeleteAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   )r   rr   r+   rs   rt   ru   r   s      r*   get_available_leavez5AssignLeaveGetUpdateDeleteAPIView.get_available_leaven  sH    	1!))---44** 	1--a00	1r   r   Tr   r   r   c                 h    | j                  |      }t        |      }t        |j                  d      S ry   )r   r   r   r#   r$   r%   rq   r   r)   s        r*   r+   z%AssignLeaveGetUpdateDeleteAPIView.gett  s/    
 2226-o>

44r,   zleave.change_availableleavec                     | j                  |      }t        ||j                        }|j                         r|j	                          t        d      S t        |j                  d      S r   )r   AvailableLeaveUpdateSerializerr#   ra   rb   r   rj   r   s        r*   r   z%AssignLeaveGetUpdateDeleteAPIView.put}  sX    
 22263O',,W
 OO3''
))#66r,   zleave.delete_availableleavec                 \    | j                  |      }|j                          t        d      S ry   )r   r   r   )r$   r%   rq   r   s       r*   r   z(AssignLeaveGetUpdateDeleteAPIView.delete  s+    
 2226 s##r,   N)r.   r/   r0   r   r1   r   r   r   r+   r   r   r2   r,   r*   r   r   k  s    )*1 7N5	5
 94P7	7 94P$	$r,   r   c                   T    e Zd ZegZegZeZ e	d      d        Z
 e	d      d        Zy)LeaveRequestGetCreateAPIViewleave.view_leaverequestc                    t         j                  j                         j                  d      }t	        |      }t        ||d      |z  }| j                  |j                  |      }t               }|j                  j                  dd       }|r(|j                         }t        ||||j                        S |j                  |j                  |      }	t        |	d|id      }
|j                  |
j                         S )Nr7   r   r8   r:   r%   T)contextr   )r   rr   r   r<   r   r   r=   r>   r
   r+   r?   r   r@   r    LeaveRequestGetAllSerilaizerr"   r#   )r$   r%   rB   multiple_approvalsr9   rC   r'   rD   rE   r(   r)   s              r*   r+   z LeaveRequestGetCreateAPIView.get  s    $,,002;;EB=gFw7PQ ! 	 ((x(H	(*	[[___d;
,,.C#GS*illKK**9<<A19g.T

 //
@@r,   zleave.add_leaverequestc                 j   |j                   }t        |t              r|j                         }|j	                  d      s|j	                  d      n|j	                  d      |d<   t        |      }|j                         r|j                         }t        j                  t              5  t        j                  |j                  j                  |j                  j                   j"                  j$                  d|j                   dd|j                   dd|j                   dd|j                   dd	|j                   dd
d|j&                   d|j&                   d
       d d d        t)        t+        |d|i      j                   d      S t)        |j,                  d      S # 1 sw Y   DxY w)NrH   rI   rJ   zNew leave request created for r   u0   تم إنشاء طلب إجازة جديد لـ u"   Neuer Urlaubsantrag erstellt für z'Nueva solicitud de permiso creada para u(   Nouvelle demande de congé créée pour rK   rL   rM   rN   rO   r%   r   rY   rZ   r\   )r#   r^   r   r_   r+   r`   ra   rb   rc   rd   re   r   rf   r   r   rG   rg   rh   ri   r]   r   LeaveRequestGetSerilaizerrj   )r$   r%   r#   r)   rB   s        r*   rk   z!LeaveRequestGetCreateAPIView.post  s   ||dI&99;D*.((:*>DHH\"DHHZDX 	Z 8TB
 &OO-M$$Y/ LL--+77JJ__pp9-:S:S9TTUVN}OhOhNiijk@AZAZ@[[\]EmF_F_E``abF}G`G`Faabc(6}7G7G6HI#6}7G7G6H!J )!Iw+?$	  
))#66' s   )B=F))F2N)r.   r/   r0   r   r1   r	   rl   LeaveRequestFilterr=   r   r+   rk   r2   r,   r*   r   r     sL    )**+O(O !:;A <A& !!9:7 ;7r,   r   c                   l    e Zd ZegZd Z ed      d        Z ed      d        Z ed      d        Z	y)	"LeaveRequestGetUpdateDeleteAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   r   rr   r+   rs   rt   ru   r   s      r*   rw   z4LeaveRequestGetUpdateDeleteAPIView.get_leave_request  H    	1''++r+22(( 	1--a00	1r   r   c                 p    | j                  |      }t        |d|i      }t        |j                  d      S )Nr%   r   rz   rZ   )rw   r   r   r#   r|   s        r*   r+   z&LeaveRequestGetUpdateDeleteAPIView.get  s9    ..r2.Iw#7

 
44r,   leave.change_leaverequestc                    | j                  |      }|j                  dk(  r|j                  }t        |t              r|j                         }|j                  d      s|j                  d      n|j                  d      |d<   t        ||      }|j                         r|j                         }t        j                  t              5  t        j                  |j                  j                   |j"                  j$                  j&                  j(                  d|j"                   dd|j"                   dd|j"                   dd	|j"                   dd
|j"                   ddd|j*                   d|j*                   d
       d d d        t-        t/        |d|i      j                  d      S t-        |j0                  d      S t2        j5                  ddi      # 1 sw Y   [xY w)Nr~   rH   rI   rJ   zLeave request updated for r   u+   تم تحديث طلب الإجازة لـ u    Urlaubsantrag aktualisiert für z&Solicitud de permiso actualizada para u$   Demande de congé mise à jour pour rK   rL   rM   rN   rO   r%   r   rY   rZ   r\   r   r   )rw   r[   r#   r^   r   r_   r+   r`   ra   rb   rc   rd   re   r   rf   r   r   rG   rg   rh   ri   r]   r   r{   rj   rt   ru   )r$   r%   rq   rB   r#   r)   s         r*   r   z&LeaveRequestGetUpdateDeleteAPIView.put  s   ..r2;.<<D$	*yy{ xx
+ &XXj) 
 <MPTUJ""$ * 1((3 KK11"/";";"N"N"c"c"t"t9-:S:S9TTUV"MmNgNgMhhi j"B=C\C\B]]^ _"HIbIbHccd e"F}G`G`Faab c,#:=;K;K:L!M':=;K;K:LA%N  1%	7/Cd	  J--c::))74E*FGG) s   B=G""G+leave.delete_leaverequestc                     | j                  |      }|j                  dk(  r|j                          t        d      S t        j                  ddi      r   )rw   r[   r   r   rt   ru   )r$   r%   rq   rB   s       r*   r   z)LeaveRequestGetUpdateDeleteAPIView.delete  sN    ..r2;.  "3''))74E*FGGr,   N)
r.   r/   r0   r   r1   rw   r   r+   r   r   r2   r,   r*   r   r     sc    )*1 !!:;5 <5 !!<="H >"HH !!<=H >Hr,   r   c                   r    e Zd ZegZ e edd      d      d        Z e edd      d      d        Zy	)
CompanyLeaveGetCreateAPIViewleave.view_companyleaveTr   r   r   c                     t         j                  j                         j                  d      }t	               }|j                  ||      }t        |d      }|j                  |j                        S Nr7   Tr   )	CompanyLeaverr   r   r<   r
   r    CompanyLeaveSerializerr"   r#   )r$   r%   company_leaver'   r(   r)   s         r*   r+   z CompanyLeaveGetCreateAPIView.get  s^    
 %,,002;;EB(*	**='B+Dt<
//
@@r,   zleave.add_companyleavec                     t        |j                        }|j                         r'|j                          t	        |j                  d      S t	        |j
                  d      S r   )r   r#   ra   rb   r   rj   r   s      r*   rk   z!CompanyLeaveGetCreateAPIView.post  sL    
 ,>
 OOJOOC88
))#66r,   N	r.   r/   r0   r   r1   r   r   r+   rk   r2   r,   r*   r   r     sY    )*5tLA	A 4dK7	7r,   r   c                       e Zd ZegZd Z e edd      d      d        Z e edd      d      d	        Z	 e ed
d      d      d        Z
y)"CompanyLeaveGetUpdateDeleteAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   )r   rr   r+   rs   rt   ru   r   s      r*   get_company_leavez4CompanyLeaveGetUpdateDeleteAPIView.get_company_leave)  r   r   r   Tr   r   r   c                 h    | j                  |      }t        |      }t        |j                  d      S ry   )r  r   r   r#   r$   r%   rq   r   r)   s        r*   r+   z&CompanyLeaveGetUpdateDeleteAPIView.get/  s/    
 ..r2+M:

44r,   zleave.change_companyleavec                     | j                  |      }t        ||j                        }|j                         r'|j	                          t        |j                  d      S t        |j                  d      S )NrJ   rz   rZ   r\   )r  r   r#   ra   rb   r   rj   r  s        r*   r   z&CompanyLeaveGetUpdateDeleteAPIView.put8  s^    
 ..r2+MM
 OOJOOC88
))#66r,   zleave.delete_companyleavec                 \    | j                  |      }|j                          t        d      S ry   )r  r   r   )r$   r%   rq   r   s       r*   r   z)CompanyLeaveGetUpdateDeleteAPIView.deleteD  s+    
 ..r2s##r,   N)r.   r/   r0   r   r1   r  r   r   r+   r   r   r2   r,   r*   r   r   &  s    )*1 5tL5	5
 7N7	7 7N$	$r,   r   c                   r    e Zd ZegZ e edd      d      d        Z e edd      d      d        Zy	)
HolidayGetCreateAPIViewleave.view_holidayTr   r   r   c                     t         j                  j                         j                  d      }t	               }|j                  ||      }t        |d      }|j                  |j                        S r   )	Holidayrr   r   r<   r
   r    HoildaySerializerr"   r#   )r$   r%   holidayr'   r(   r)   s         r*   r+   zHolidayGetCreateAPIView.getQ  s\     //%%'007(*	**7G<&t$7
//
@@r,   zleave.add_holidayc                     t        |j                        }|j                         r'|j                          t	        |j                  d      S t	        |j
                  d      S r   )r  r#   ra   rb   r   rj   r   s      r*   rk   zHolidayGetCreateAPIView.post[  sL     'GLL9
 OOJOOC88
))#66r,   Nr   r2   r,   r*   r  r  N  sW    )*0$GjAA /FZ77r,   r  c                       e Zd Zd Z e edd      d      d        Z e edd      d      d	        Z e ed
d      d      d        Zy)HolidayGetUpdateDeleteAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   )r  rr   r+   rs   rt   ru   r   s      r*   get_holidayz)HolidayGetUpdateDeleteAPIView.get_holidayh  sF    	1??&&"&--## 	1--a00	1r   r	  Tr   r   r   c                 h    | j                  |      }t        |      }t        |j                  d      S ry   )r  r  r   r#   r$   r%   rq   r  r)   s        r*   r+   z!HolidayGetUpdateDeleteAPIView.getn  s/     ""2&&w/

44r,   zleave.change_holidayc                     | j                  |      }t        ||j                        }|j                         r'|j	                          t        |j                  d      S t        |j                  d      S r   )r  r  r#   ra   rb   r   rj   r  s        r*   r   z!HolidayGetUpdateDeleteAPIView.putv  s^    
 ""2&&wW\\B
 OOJOOC88
))#66r,   zleave.delete_holidayc                 \    | j                  |      }|j                          t        d      S ry   )r  r   r   )r$   r%   rq   r  s       r*   r   z$HolidayGetUpdateDeleteAPIView.delete  s)    
 ""2&s##r,   N)	r.   r/   r0   r  r   r   r+   r   r   r2   r,   r*   r  r  f  s{    1 0$Gj55
 2DI7	7 2DI$	$r,   r  c                   @    e Zd ZegZd Zd Zd Z ed      d        Z	y)LeaveRequestApproveAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   r   r   s      r*   rw   z,LeaveRequestApproveAPIView.get_leave_request  r   r   c                 R   |j                   |j                  kD  rM|j                   |j                  z
  }|j                  |_        d|_        |j                  |z
  |_        ||_        n1|j                  }||j                   z
  |_        |j                   |_        |j                          y Nr   requested_daysr   approved_available_dayscarryforward_daysapproved_carryforward_daysrb   r$   rB   r   leavetemps        r*   leave_approve_calculationz4LeaveRequestApproveAPIView.leave_approve_calculation  s    ''/*H*HH!00?3Q3QQE4C4R4RM1-.O*11E9 - 8=M4"11D-1M4P4P-PO*4A4P4PM1r,   c                 f   |j                   j                  rZt        j                  j	                  |      j                  d       | j                  ||       d|_        |j                          y |j                         }|d   D cg c]  }|j                  |j                   k(  r| }}t        j                  j	                  |d   |      j                         }d|_        |j                          |d   |d   d   k(  r*| j                  ||       d|_        |j                          y y c c}w )	N)leave_request_idT)is_approvedapprovedmanagersr   )
manager_idr&  )r   is_superuserLeaveRequestConditionApprovalrr   r   updater$  r[   rb   r   ri   firstr'  )r$   r%   rB   r   conditional_requestsmanagerapprovercondition_approvals           r*   leave_multiple_approvez1LeaveRequestApproveAPIView.leave_multiple_approve  s.   <<$$)1188!. 9 ff&**=/J#-M  #0#C#C#E   4J?++w||; H 
 "?!F!F!M!M#A; "N "eg  .2*##%{2:>rBB..}oN'1$""$ Cs   "D.r   c                    | j                  |      }t        ||j                        }|j                         r|j                  j                  d      }|j                         s*| j                  ||       d|_        |j                          n| j                  |||       t        j                  t              5  t        j                  |j                   j"                  |j$                  j&                  dddddd	d
|j(                   d|j(                   
       d d d        t+        d      S t+        |j,                  d      S # 1 sw Y   ,xY w)NrJ   r   r(  z$Your Leave request has been approveduD   تمت الموافقة على طلب الإجازة الخاص بكz!Ihr Urlaubsantrag wurde genehmigtz&Se ha aprobado su solicitud de permisou*   Votre demande de congé a été approuvéerK   /leave/user-request-view?id=r   rO   rz   rZ   r\   )rw   LeaveRequestApproveSerializerr#   ra   r   r+   r   r$  r[   rb   r4  rc   rd   re   r   rf   r   r   rG   ri   r]   r   rj   )r$   r%   rq   rB   r)   r   s         r*   r   zLeaveRequestApproveAPIView.put  s&   ..r22=w||T
 (77;;<MNO 335..}oN'1$""$++G]OT$$Y/ LL--+77HH?b?DH(;M<L<L;MN#;M<L<L;M!N 3''
))#66 s   :A"EEN)
r.   r/   r0   r   r1   rw   r$  r4  r   r   r2   r,   r*   r  r    s4    )*1 %2 !!<=7 >7r,   r  c                   :    e Zd ZegZd Zd Z ed      d        Zy)LeaveRequestRejectAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   r   r   s      r*   rw   z+LeaveRequestRejectAPIView.get_leave_request  r   r   c                 D   |j                   }t        j                  j                  ||      }|xj                  |j
                  z  c_        |xj                  |j                  z  c_        |j                          d|_        d|_        d|_	        |j                          y )Nr   rG   r   rejected)
r   r   rr   r+   r   r  r  r   rb   r[   )r$   rB   rG   r   r   s        r*   leave_calculationz+LeaveRequestRejectAPIView.leave_calculation  s    %33(0044'[ 5 
 	&&-*O*OO&))]-U-UU)01-340)r,   r   c                    | j                  |      }|j                  j                  }|j                  dk7  r| j	                  ||       t        j                  t              5  t        j                  |j                  j                  |j                  j                  ddddddd|j                   d	|j                   d

       d d d        t        d      S t        j                  d      # 1 sw Y   *xY w)Nr=  z$Your Leave request has been rejectedu1   تم رفض طلب الإجازة الخاص بكz!Ihr Urlaubsantrag wurde abgelehntz)Tu solicitud de permiso ha sido rechazadau(   Votre demande de congé a été rejetéerK   r6  r   rN   rO   rz   rZ   zNothing to reject.)rw   r   r   r[   r>  rc   rd   re   r   rf   rG   ri   r]   r   rt   ru   r   s        r*   r   zLeaveRequestRejectAPIView.put  s    ..r2ll//:-""=+>$$Y/ LL--+77HH?O?GF(;M<L<L;MN#;M<L<L;MQ!O 3''))*>?? s   "A#C..C7N)	r.   r/   r0   r   r1   rw   r>  r   r   r2   r,   r*   r9  r9    s1    )*1 !!<=@ >@r,   r9  c                       e Zd ZegZd Zd Zy)LeaveRequestCancelAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   r   r   s      r*   rw   z+LeaveRequestCancelAPIView.get_leave_request  r   r   c                    | j                  |      }|j                  |j                  j                  k(  rz|j                  dk(  rk|j
                  }t        j                         j                         }||k\  r#d|_        |j                          t        d      S t        j                  d      t        j                  d      )Nr(  	cancelledrz   rZ   zNothing to cancel.Access Denied.)rw   rG   r   r   r[   rI   datetimenowdaterb   r   rt   ru   )r$   r%   rq   rB   rI   	curr_dates         r*   r   zLeaveRequestCancelAPIView.put  s    ..r2%%)B)BB$$
2&11J ++-IY&'2$""$s++--.BCC))*:;;r,   N)r.   r/   r0   r   r1   rw   r   r2   r,   r*   rA  rA    s    )*1<r,   rA  c                   :    e Zd ZegZd Zd Z ed      d        Zy)LeaveAllocationApproveAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   r   r   s      r*   r   z:LeaveAllocationApproveAPIView.get_leave_allocation_request$  r   r   c                     t         j                  j                  |j                  |j                        d   }|xj
                  |j                  z  c_        |j                          y )Nr   r   )r   rr   get_or_createrG   r   r   r  rb   )r$   leave_allocation_requestr   s      r*   approve_calculationsz2LeaveAllocationApproveAPIView.approve_calculations*  s_    (00>>0<<2@@ ? 
  	&&*B*Q*QQ&r,   r   c                     | j                  |      }|j                  dk(  r4| j                  |       d|_        |j                          t	        d      S t
        j                  d      )Nr~   r(  rz   rZ   rE  )r   r[   rP  rb   r   rt   ru   r$   r%   rq   rO  s       r*   r   z!LeaveAllocationApproveAPIView.put2  sb    #'#D#DR#H #**k9%%&>?.8$+$))+3''))*:;;r,   N)	r.   r/   r0   r   r1   r   rP  r   r   r2   r,   r*   rK  rK  !  s0    )*1 !!FG< H<r,   rK  c                   :    e Zd ZegZd Zd Z ed      d        Zy)#LeaveAllocationRequestRejectAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   r   r   s      r*   r   z@LeaveAllocationRequestRejectAPIView.get_leave_allocation_request@  r   r   c                 "   |j                   dk(  r|j                  }|j                  }t        j                  j                  ||j                        j                         }t        d|j                  |z
        |_	        |j                          y y )Nr(  r<  r   )r[   r   r  r   rr   r   rG   r/  maxr   rb   )r$   rO  r   r  r   s        r*   reject_calculationz6LeaveAllocationRequestRejectAPIView.reject_calculationF  s    #**j81??J5DDN,44;;(4@@ <  eg  .1?11NB.O*   " 9r,   r   c                     | j                  |      }|j                  dk7  r4| j                  |       d|_        |j                          t	        d      S t
        j                  d      )Nr=  rz   rZ   rE  )r   r[   rX  rb   r   rt   ru   rR  s       r*   r   z'LeaveAllocationRequestRejectAPIView.putS  sb    #'#D#DR#H #**j8##$<=.8$+$))+3''))*:;;r,   N)	r.   r/   r0   r   r1   r   rX  r   r   r2   r,   r*   rT  rT  =  s0    )*1# !!FG< H<r,   rT  c                   V    e Zd ZegZd Zd Z ed      d        Z ed      d        Z	y)$LeaveRequestBulkApproveDeleteAPIviewc                 "   	 |j                   j                  d      }t
        j                  j                  |      j                  g d      }|r|S t        j	                  d      # t        $ r}t        j	                  ddgi      d }~ww xY w)Nr&  zThis field is requiredid__in)rejectrD  r(  )
status__inzNothing to approve)	r#   getlistre   rt   ru   r   rr   r   exclude)r$   r%   leave_request_idsrv   leave_requestss        r*   get_leave_requestsz7LeaveRequestBulkApproveDeleteAPIview.get_leave_requestsa  s    	 ' 4 45G H
 &--44<M4NVV: W 
 !!))*>??  	--#&>%?@ 	s   A( (	B1B		Bc                 R   |j                   |j                  kD  rM|j                   |j                  z
  }|j                  |_        d|_        |j                  |z
  |_        ||_        n1|j                  }||j                   z
  |_        |j                   |_        |j                          y r  r  r!  s        r*   r$  z>LeaveRequestBulkApproveDeleteAPIview.leave_approve_calculationo  s    ''/*H*HH!00?3Q3QQE4C4R4RM1-.O*11E9 - 8=M4"11D-1M4P4P-PO*4A4P4PM1r,   r   c                 `   | j                  |      }|D ]  }|j                  }|j                  }t        j                  j                  ||      }|j                  |j                  z   }||j                  k\  se| j                  ||       d|_
        |j                           t        d      S )Nr<  r(  rz   rZ   )re  rG   r   r   rr   r+   r   r  r  r$  r[   rb   r   )r$   r%   rd  rB   rG   r   r   total_available_leaves           r*   r   z(LeaveRequestBulkApproveDeleteAPIview.put~  s    009+ 	%M'33K)77M,4488+ 9 O  ..1R1RR " %(D(DD..}oN'1$""$	% s##r,   r   c                 \    | j                  |      }|j                          t        d      S ry   )re  r   r   )r$   r%   rd  s      r*   r   z+LeaveRequestBulkApproveDeleteAPIview.delete  s)    009s##r,   N)
r.   r/   r0   r   r1   re  r$  r   r   r   r2   r,   r*   r[  r[  ^  sJ    )*@ !!<=$ >$" !!<=$ >$r,   r[  c                   .    e Zd ZegZegZeZd Z	d Z
d Zy)'EmployeeLeaveAllocationGetCreateAPIViewc                 T    |j                   }t        |t              rt        d      |S r   r   r   s      r*   r   z0EmployeeLeaveAllocationGetCreateAPIView.get_user  r   r,   c                    | j                  |      j                  }|j                  j                         j	                  d      }| j                  |j                  |      }t               }|j                  j                  dd       }|r(|j                         }t        ||||j                        S |j                  |j                  |      }t        |d      }	|j                  |	j                        S r6   )r   r   leaveallocationrequest_setr   r<   r=   r>   r
   r+   r?   r   r@   r    r   r"   r#   )
r$   r%   r&   r   rC   r'   rD   rE   r(   r)   s
             r*   r+   z+EmployeeLeaveAllocationGetCreateAPIView.get  s    ==)66&AAEEGPPQVW((?R(S	(*	[[___d;
,,.C#GS*illKK**9<<A8DI
//
@@r,   c                 V   |j                   }| j                  |      j                  j                  }t	        |t
              r|j                         }||d<   ||d<   t        |      }|j                         r|j                          t        d      S t        |j                  d      S )NrG   r   rJ   rz   rZ   r\   )r#   r   r   r]   r^   r   r_   r   ra   rb   r   rj   )r$   r%   r#   rG   r)   s        r*   rk   z,EmployeeLeaveAllocationGetCreateAPIView.post  s    ||mmG,99<<dI&99;D)](\;F
 OO3''
))#66r,   N)r.   r/   r0   r   r1   r	   rl   r   r=   r   r+   rk   r2   r,   r*   rk  rk    s(    )**+O2OA7r,   rk  c                   $    e Zd ZegZd Zd Zd Zy)*EmployeeLeaveAllocationUpdateDeleteAPIViewc                 *   |j                   }t        |t              rt        d      	 t        j
                  j                  |      }|j                  |j                  k(  r|S y # t        j                  $ r}t        j                  |      d }~ww xY w)Nr   )r]   )r   r^   r   r   r   rr   r+   rG   r   rs   rt   ru   )r$   r%   rq   r   r   rv   s         r*   get_allocation_requestzAEmployeeLeaveAllocationUpdateDeleteAPIView.get_allocation_request  s    ||dM*/**	1!7!?!?!C!Cr!C!J!--1B1BB)) C%22 	1--a00	1s   :A% %B8BBc                    | j                  ||      }|j                  dk(  r|j                  }|j                  j                  j
                  }t        |t              r|j                         }||d<   ||d<   t        ||      }|j                         r0|j                         }t        t        |      j                  d      S t        |j                  d      S t        j!                  dd	i      )
Nr~   rG   r   rJ   rY   rZ   r\   r   r   )rs  r[   r#   r   r   r]   r^   r   r_   r   ra   rb   r   r   rj   rt   ru   )r$   r%   rq   r   r#   rG   r)   s          r*   r   z.EmployeeLeaveAllocationUpdateDeleteAPIView.put  s    !88"E$$3<<D!,,3366K$	*yy{"-D!,D9:LSWXJ""$%/__%6"78JKPP  J--c::))74E*FGGr,   c                     | j                  ||      }|j                  dk(  r|j                          t        d      S t        j                  ddi      r   )rs  r[   r   r   rt   ru   r   s       r*   r   z1EmployeeLeaveAllocationUpdateDeleteAPIView.delete  sQ    !88"E$$3%%'3''))74E*FGGr,   N)r.   r/   r0   r   r1   rs  r   r   r2   r,   r*   rq  rq    s    )*	1$(Hr,   rq  c                   .    e Zd ZegZ ed      d        Zy)"LeaveRequestedApprovedCountAPIViewr   c                    t         j                  j                         }t        |      }t	        ||d      |z  }|j                  d      j                         }|j                  d      j                         }||d}t        |d      S )Nr   r~   rZ   r(  )r~   r(  rz   )r   rr   r   r   r   r   countr   )r$   r%   rd  r   r9   r~   r(  r#   s           r*   r+   z&LeaveRequestedApprovedCountAPIView.get  s    %--113=gFw8QR ! 	 OO;O7==?	??*?5;;=&H=S))r,   Nr.   r/   r0   r   r1   r   r+   r2   r,   r*   rw  rw    s#    )* !:;
* <
*r,   rw  c                       e Zd ZegZd Zd Zy)$EmployeeAvailableLeaveTypeGetAPIViewc                     	 t         j                  j                  |      S # t         j                  $ r}t        j                  |      d }~ww xY wr   )Employeerr   r+   rs   rt   ru   r   s      r*   get_employeez1EmployeeAvailableLeaveTypeGetAPIView.get_employee  sH    	1##''2'..$$ 	1--a00	1r   c                 F   | j                  |      }|j                  j                         }|j                  dd      }t        j
                  j                  |      }t               }|j                  ||      }t        |d      }	|j                  |	j                        S )Nr   T)flatr]  r   )r  r   r   values_listr   rr   r   r
   r    r   r"   r#   )
r$   r%   rq   r&   r   r   leave_typesr'   r(   r)   s
             r*   r+   z(EmployeeAvailableLeaveTypeGetAPIView.get  s    $$R("22668(44_44P''..n.E(*	**;@.t$?
//
@@r,   N)r.   r/   r0   r   r1   r  r+   r2   r,   r*   r|  r|    s    )*1Ar,   r|  c                   B    e Zd ZegZ e edd      d      d        Zy)"LeaveTypeGetPermissionCheckAPIViewr   Tr   r   r   c                     t        d      S ry   r   r$   r%   s     r*   r+   z&LeaveTypeGetPermissionCheckAPIView.get      
 s##r,   Nr.   r/   r0   r   r1   r   r   r+   r2   r,   r*   r  r    s0    )*14H$	$r,   r  c                   .    e Zd ZegZ ed      d        Zy)(LeaveAllocationGetPermissionCheckAPIViewr   c                     t        d      S ry   r   r  s     r*   r+   z,LeaveAllocationGetPermissionCheckAPIView.get      s##r,   Nrz  r2   r,   r*   r  r    s$    )* !DE$ F$r,   r  c                   .    e Zd ZegZ ed      d        Zy)%LeaveRequestGetPermissionCheckAPIViewr   c                     t        d      S ry   r   r  s     r*   r+   z)LeaveRequestGetPermissionCheckAPIView.get"  r  r,   Nrz  r2   r,   r*   r  r    s#    )* !:;$ <$r,   r  c                   B    e Zd ZegZ e edd      d      d        Zy)$LeaveAssignGetPermissionCheckAPIViewr   Tr   r   r   c                     t        d      S ry   r   r  s     r*   r+   z(LeaveAssignGetPermissionCheckAPIView.get*  r  r,   Nr  r2   r,   r*   r  r  '  s0    )*7N$	$r,   r  c                       e Zd ZegZd Zy)LeavePermissionCheckAPIViewc                 N   t               }t               }t               }t               }g }	 |j	                  |      j
                  dk(  r|j                  d       	 |j	                  |      j
                  dk(  r|j                  d       	 |j	                  |      j
                  dk(  r"|j                  d       |j                  d       	 |j	                  |      j
                  dk(  r|j                  d       t        d|id      S #  Y xY w#  Y xY w#  Y QxY w#  Y (xY w)	Nrz   r   leave_allocationrB   leave_overviewleave_assign	perm_listrZ   )r  r  r  r  r+   status_codeappendr   )r$   r%   r   r  rB   r  r  s          r*   r+   zLeavePermissionCheckAPIView.get5  s   79
CE=?;=		~~g&22c9  .	##G,88C?  !34	  )55<  1  !12	(44;  0 i0==%		
		s0   /D /D A D /D  DDD D$Nr-   r2   r,   r*   r  r  2  s    )*>r,   r  )Brc   django.contrib.auth.decoratorsr   django.contrib.auth.modelsr   django.db.modelsr   django.httpr   r   django.utils.decoratorsr   django_filters.rest_frameworkr	   rest_framework.paginationr
   rest_framework.permissionsr   rest_framework.responser   rest_framework.viewsr   base.methodsr   -horilla_api.api_serializers.leave.serializersleave.filtersleave.methodsr   leave.modelsr   notifications.signalsr   api_decorators.base.decoratorsr   api_methods.base.methodsr   r   r4   ro   r   r   r   r   r   r   r   r   r   r   r  r  r  r9  rA  rK  rT  r[  rk  rq  rw  r|  r  r  r  r  r  r2   r,   r*   <module>r     s    > 4 " * 4 = : 6 , ( + ;  : % ( I 8	Aw 	A.77 .7b4Hg 4Hn7 74%$g %$P47W 47n%H7 %HP:7' :7z%$ %$P777 77t<H <H~77 74%$ %$P7g 70#$G #$LL7 L7^*@ *@Z< <2<G <8<' <B6$7 6$r#7g #7L'H 'HT* *"A7 A($ $$w $$G $$7 $>' >r,   