
    vg=                        d dl mZ d dlmZ d dlmZmZ d dl d Z G d dej                        Z
 G d dej                        Z
 G d	 d
ej                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej$                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d d ej                        Z G d! d"ej                        Z G d# d$ej                        Z G d% d&ej                        Z G d' d(ej                        Z G d) d*ej                        Z G d+ d,ej                        Zy-).    )serializers)Employee)cal_effective_requested_dayscalculate_requested_days)*c                 D   |j                  d      }|j                  d      }|j                  d      |j                  d      nd}|j                  d      |j                  d      nd}|j                  d      }|j                  d      }|j                  d      }t        j                  j                  ||	      j	                         r$t        j                  j                  ||	      d
   nd }	|	st        j                  d| d      t        ||||      }
t        ||||
      }|	j                  |	j                  z   }i }|j                  j                  ||      }| j                  r&|j                  | j                  j                        }|rt        j                  d      ||k  sdg|d<   ||k(  r||k7  rt        j                  d      ||k  st        j                  d      |j                  dk(  r|d k(  rdg|d<   |rt        j                  |      y )N
start_dateend_datestart_date_breakdownfull_dayend_date_breakdownemployee_idleave_type_id
attachmentr   r   r   z)Employee is not assigned with leave type .)r	   r
   r   requested_days)start_date__lteend_date__gte)idz5There is already a leave request for this date range.,End date should not be less than start date.zDThere is a mismatch in the breakdown of the start date and end date.z)Employee doesn't have enough leave days..yesThis field is required.)getAvailableLeaveobjectsfilterexistsr   ValidationErrorr   r   available_dayscarryforward_daysleaverequest_setinstanceexcluder   require_attachment)selfdatar	   r
   r   r   employeer   r   available_leaver   effective_requested_daystotal_leave_dayserrorsleave_requestss                  A/var/www/horilla/horilla_api/api_serializers/leave/serializers.pyleave_Validationsr/      se   ,'Jxx
#H 88*+7 	'(  88()5 	%& 
 xx&HHH_-M,'J
 !!(('X ) 

&( 	%%'X 	& 	

	   ))7aH
 	
 .H24FN  <#%	  	&&)J)JJ  F..55 
 6 N }}'//4==3C3C/D))C
 	

 !LMzX"6:L"L))R
 	
 $'77))*UVV''50Z45G 9:|))&11     c                   p    e Zd Z ej                         Z ej                         Z G d d      Zd Zd Z	y)GetAvailableLeaveTypeSerializerc                       e Zd ZeZg dZy$GetAvailableLeaveTypeSerializer.Meta)r   r   iconr    r!   r+   N__name__
__module____qualname__r   modelfields r0   r.   Metar5   V       
r0   r>   c                 Z    |j                   rt        |j                         j                  S y Nr   LeaveTypeAllGetSerializerr'   r&   objs     r.   get_leave_type_idz1GetAvailableLeaveTypeSerializer.get_leave_type_ida   %    ,S->->?DDDr0   c                 R    	 |j                   j                  j                  S #  Y y xY wrA   r   r6   urlrD   s     r.   get_iconz(GetAvailableLeaveTypeSerializer.get_iconf   )    	$$))---	   " &N)
r8   r9   r:   r   SerializerMethodFieldr   r6   r>   rF   rK   r=   r0   r.   r2   r2   R   s6    5K557M,;,,.D	
 	

r0   r2   c                       e Zd Z ej                         Z ej                         Z ej                         Z G d d      Zd Z	d Z
d Zy)r2   c                       e Zd ZeZg dZyr4   r7   r=   r0   r.   r>   z$GetAvailableLeaveTypeSerializer.Metar   r?   r0   r>   c                 Z    |j                   rt        |j                         j                  S y rA   rB   rD   s     r.   rF   z1GetAvailableLeaveTypeSerializer.get_leave_type_id}   rG   r0   c                 R    	 |j                   j                  j                  S #  Y y xY wrA   rI   rD   s     r.   rK   z(GetAvailableLeaveTypeSerializer.get_icon   rL   rM   c                 4    |j                   |j                  z   S rA   )r    r!   rD   s     r.   get_total_leave_daysz4GetAvailableLeaveTypeSerializer.get_total_leave_days   s    !!C$9$999r0   N)r8   r9   r:   r   rN   r   r6   r+   r>   rF   rK   rT   r=   r0   r.   r2   r2   m   sL    5K557M,;,,.D8{88:	
 	

:r0   c                   H    e Zd Z ej                         Z G d d      Zd Zy) userLeaveRequestGetAllSerilaizerc                       e Zd ZeZg dZy)%userLeaveRequestGetAllSerilaizer.Meta)	requested_datedescriptionr   approved_available_daysapproved_carryforward_days
created_atreject_reasonr   
created_byNr8   r9   r:   LeaveRequestr;   r$   r=   r0   r.   r>   rX      s    

r0   r>   c                 Z    |j                   rt        |j                         j                  S y rA   rB   rD   s     r.   rF   z2userLeaveRequestGetAllSerilaizer.get_leave_type_id   rG   r0   Nr8   r9   r:   r   rN   r   r>   rF   r=   r0   r.   rV   rV      s!    5K557M
 
r0   rV   c                   H    e Zd Z ej                         Z G d d      Zd Zy)UserLeaveRequestGetSerilaizerc                       e Zd ZeZg dZy)"UserLeaveRequestGetSerilaizer.Meta)rY   r[   r\   r]   r^   r   r_   Nr`   r=   r0   r.   r>   rg      s    
r0   r>   c                 Z    |j                   rt        |j                         j                  S y rA   rB   rD   s     r.   rF   z/UserLeaveRequestGetSerilaizer.get_leave_type_id   rG   r0   Nrc   r=   r0   r.   re   re      s!    5K557M

 

r0   re   c                   &    e Zd Z G d d      Zd Zy)"LeaveRequestCreateUpdateSerializerc                       e Zd ZeZg dZy)'LeaveRequestCreateUpdateSerializer.Meta)r   r   r	   r   r
   r   rZ   r   Nr8   r9   r:   ra   r;   r<   r=   r0   r.   r>   rl      s    	
r0   r>   c                     t        | |       |S rA   r/   r&   r'   s     r.   validatez+LeaveRequestCreateUpdateSerializer.validate       $%r0   Nr8   r9   r:   r>   rq   r=   r0   r.   rj   rj      s    
 
r0   rj   c                   &    e Zd Z G d d      Zd Zy)UpdateLeaveRequestSerializerc                       e Zd ZeZg dZy)!UpdateLeaveRequestSerializer.Meta)r	   r   r
   r   rZ   r   Nrm   r=   r0   r.   r>   rw      s    
r0   r>   c                     t        | |       |S rA   ro   rp   s     r.   rq   z%UpdateLeaveRequestSerializer.validate   rr   r0   Nrs   r=   r0   r.   ru   ru      s    	
 	
r0   ru   c                   &    e Zd Z G d d      Zd Zy)LeaveTypeGetCreateSerilaizerc                       e Zd ZeZdZy)!LeaveTypeGetCreateSerilaizer.Meta__all__Nr8   r9   r:   	LeaveTyper;   r<   r=   r0   r.   r>   r|      s    r0   r>   c                    |j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|dk(  r|d k(  rt        j                  dd	gi      |d
k(  r|d k(  rt        j                  dd	gi      |dv r|dk(  rt        j                  dd	gi      |dk(  r|d k(  rt        j                  dd	gi      |S )Nresetreset_basedreset_month	reset_dayreset_weekdaycarryforward_typecarryforward_maxTr   yearly)r   monthly weeklyr   r   r   )	r&   r'   r   r   r   r   r   r   r   s	            r.   rq   z%LeaveTypeGetCreateSerilaizer.validate   s-   !hh}-hh}-HH[)	1 HH%8988$67D=d"!11"%>$?@  ([D-@!11"%>$?@   55)r/!11 #<"=>  (]d-B!11$'@&AB  r0   Nrs   r=   r0   r.   rz   rz      s     r0   rz   c                        e Zd Z G d d      Zy)rC   c                       e Zd ZeZg dZy)LeaveTypeAllGetSerializer.Meta)r   namer6   Nr~   r=   r0   r.   r>   r     s    'r0   r>   Nr8   r9   r:   r>   r=   r0   r.   rC   rC      s    ( (r0   rC   c                   F    e Zd Z ej                  d      Z G d d      Zy)&LeaveAllocationRequestCreateSerializerTrequiredc                       e Zd ZeZg dZy)+LeaveAllocationRequestCreateSerializer.Meta)r   r   r   r_   rZ   r   N)r8   r9   r:   LeaveAllocationRequestr;   r<   r=   r0   r.   r>   r   	  s    &
r0   r>   N)r8   r9   r:   r   
FloatFieldr   r>   r=   r0   r.   r   r     s    +[++T:N	
 	
r0   r   c                       e Zd Z ej                  dej                  j                               Z ej                  de	j                  j                               Z
d Zd Zy)AssignLeaveCreateSerializerT)manyquerysetc                 :    |st        j                  ddgi      |S )Nleave_type_idsr   r   r   r&   values     r.   validate_leave_type_idsz3AssignLeaveCreateSerializer.validate_leave_type_ids  s+    --!$=#>?  r0   c                 :    |st        j                  ddgi      |S )Nemployee_idsr   r   r   s     r.   validate_employee_idsz1AssignLeaveCreateSerializer.validate_employee_ids$  s+    --";!<=  r0   N)r8   r9   r:   r   PrimaryKeyRelatedFieldr   r   allr   r   r   r   r   r=   r0   r.   r   r     sZ    7[77I--113N 6;55H,,002Lr0   r   c                   p    e Zd Z ej                         Z ej                         Z G d d      Zd Zd Z	y)AssignLeaveGetSerializerc                       e Zd ZeZddgZy)AssignLeaveGetSerializer.Meta
reset_dateexpired_dateN)r8   r9   r:   r   r;   r$   r=   r0   r.   r>   r   1  s    0r0   r>   c                 J    |j                   }|rt        |      j                  S y rA   r   EmployeeGetSerializerr'   r&   rE   r(   s      r.   get_employee_idz(AssignLeaveGetSerializer.get_employee_id5  "    ??(2777r0   c                 Z    |j                   rt        |j                         j                  S y rA   rB   rD   s     r.   rF   z*AssignLeaveGetSerializer.get_leave_type_id;  rG   r0   N)
r8   r9   r:   r   rN   r   r   r>   r   rF   r=   r0   r.   r   r   ,  s6    3+335K5K557M1 1r0   r   c                   H    e Zd Z ej                         Z G d d      Zd Zy)r   c                       e Zd ZeZg dZy)EmployeeGetSerializer.Meta)r   	full_nameemployee_profilebadge_idN)r8   r9   r:   r   r;   r<   r=   r0   r.   r>   r   D  s    Dr0   r>   c                 "    |j                         S rA   )get_full_namerD   s     r.   r   z#EmployeeGetSerializer.get_full_nameH  s      ""r0   N)r8   r9   r:   r   rN   r   r>   r   r=   r0   r.   r   r   A  s#    1113IE E#r0   r   c                   F    e Zd Z ej                  d      Z G d d      Zy)AvailableLeaveUpdateSerializerTr   c                       e Zd ZeZddgZy)#AvailableLeaveUpdateSerializer.Metar    r!   Nr7   r=   r0   r.   r>   r   O  s    "$78r0   r>   N)r8   r9   r:   r   r   r    r>   r=   r0   r.   r   r   L  s    +[++T:N9 9r0   r   c                       e Zd Z ej                         Z ej                         Z ej                         Z G d d      Zd Z	d Z
d Zy)LeaveRequestGetAllSerilaizerc                       e Zd ZeZg dZy)!LeaveRequestGetAllSerilaizer.Meta)rY   rZ   r   r[   r\   r]   r^   r_   Nr`   r=   r0   r.   r>   r   Y  s    	
r0   r>   c                 J    |j                   }|rt        |      j                  S y rA   r   r   s      r.   r   z,LeaveRequestGetAllSerilaizer.get_employee_idf  r   r0   c                 Z    |j                   rt        |j                         j                  S y rA   rB   rD   s     r.   rF   z.LeaveRequestGetAllSerilaizer.get_leave_type_idl  rG   r0   c                 h   t         j                  j                  |      }| j                  d   j                  j
                  }|rm|j                  dk(  r^|j                  d      }|j                          d|j                          }|j                  |      j                         rdnd}||d	S y 
N)leave_request_idrequest	requestedT)is_approvedz / )
manager_idF)countr   	LeaveRequestConditionApprovalr   r   contextuseremployee_getstatusr   r   r&   rE   	approvalsr(   r   r   s         r.   get_multiple_approvez1LeaveRequestGetAllSerilaizer.get_multiple_approveq      199@@RU@V	<<	*//<<{2#**t*<K"((*+3y/@.ABE#**h*?FFHe  #;??r0   Nr8   r9   r:   r   rN   r   r   multiple_approver>   r   rF   r   r=   r0   r.   r   r   T  sL    3+335K5K557M8{88:
 


r0   r   c                       e Zd Z ej                         Z ej                         Z ej                         Z G d d      Zd Z	d Z
d Zy)LeaveRequestGetSerilaizerc                       e Zd ZeZg dZy)LeaveRequestGetSerilaizer.Meta)rY   r[   r\   r]   r^   r_   Nr`   r=   r0   r.   r>   r     s    
r0   r>   c                 J    |j                   }|rt        |      j                  S y rA   r   r   s      r.   r   z)LeaveRequestGetSerilaizer.get_employee_id  r   r0   c                 Z    |j                   rt        |j                         j                  S y rA   rB   rD   s     r.   rF   z+LeaveRequestGetSerilaizer.get_leave_type_id  rG   r0   c                 h   t         j                  j                  |      }| j                  d   j                  j
                  }|rm|j                  dk(  r^|j                  d      }|j                          d|j                          }|j                  |      j                         rdnd}||d	S y r   r   r   s         r.   r   z.LeaveRequestGetSerilaizer.get_multiple_approve  r   r0   Nr   r=   r0   r.   r   r   ~  sL    3+335K5K557M8{88:	
 	


r0   r   c                        e Zd Z G d d      Zy) LeaveAllocationRequestSerilaizerc                       e Zd ZeZg dZy)%LeaveAllocationRequestSerilaizer.Meta)rY   r   r_   r]   r^   Nr8   r9   r:   r   r;   r$   r=   r0   r.   r>   r     s    &
r0   r>   Nr   r=   r0   r.   r   r     s    
 
r0   r   c                       e Zd Z ej                         Z ej                         Z ej                         Z G d d      Zd Z	d Z
d Zy)#LeaveAllocationRequestGetSerializerc                       e Zd ZeZg dZy)(LeaveAllocationRequestGetSerializer.Meta)rY   r]   r^   Nr   r=   r0   r.   r>   r     s    &Cr0   r>   c                 J    |j                   }|rt        |      j                  S y rA   r   r   s      r.   r   z3LeaveAllocationRequestGetSerializer.get_employee_id  r   r0   c                 Z    |j                   rt        |j                         j                  S y rA   rB   rD   s     r.   rF   z5LeaveAllocationRequestGetSerializer.get_leave_type_id  rG   r0   c                 J    |j                   }|rt        |      j                  S y rA   )r_   r   r'   )r&   rE   r_   s      r.   get_created_byz2LeaveAllocationRequestGetSerializer.get_created_by  s"    ^^
(4999r0   N)r8   r9   r:   r   rN   r   r   r_   r>   r   rF   r   r=   r0   r.   r   r     sM    3+335K5K557M2224JD D
r0   r   c                        e Zd Z G d d      Zy)CompanyLeaveSerializerc                       e Zd ZeZdgZy)CompanyLeaveSerializer.Meta
company_idN)r8   r9   r:   CompanyLeaver;   r$   r=   r0   r.   r>   r     s    .r0   r>   Nr   r=   r0   r.   r   r     s    ! !r0   r   c                   &    e Zd Z G d d      Zd Zy)HoildaySerializerc                       e Zd ZeZdgZy)HoildaySerializer.Metar   N)r8   r9   r:   Holidayr;   r$   r=   r0   r.   r>   r     s    .r0   r>   c                     |j                  d      }|j                  d      }|r||k  st        j                  ddgi      |S )Nr	   r
   r   r   )r&   r'   r	   r
   s       r.   rq   zHoildaySerializer.validate  sN    XXl+
88J'J(2--LMN  r0   Nrs   r=   r0   r.   r   r     s    ! !r0   r   c                   &    e Zd Z G d d      Zd Zy)LeaveRequestApproveSerializerc                       e Zd ZeZg Zy)"LeaveRequestApproveSerializer.MetaNrm   r=   r0   r.   r>   r     s    r0   r>   c                 b   | j                   }|j                  dk7  rt        j                  d      |j                  }|j
                  }t        j                  j                  ||      }|j                  |j                  z   }||j                  k\  st        j                  | d      ||d<   |S )Nr   zNothing to approve.r   z5 dont have enough leave days to approve the request..r)   )r#   r   r   r   r   r   r   r   r   r    r!   r   )r&   r'   leave_requestr   r   r)   total_available_leaves          r.   rq   z&LeaveRequestApproveSerializer.validate  s    ;.--.CDD#//%33(0044'[ 5 
 **_-N-NN 	 %(D(DD---TU  #2r0   Nrs   r=   r0   r.   r   r     s     r0   r   N)rest_frameworkr   employee.modelsr   leave.formsr   r   leave.modelsr/   ModelSerializerr2   rV   re   rj   ru   rz   rC   r   
Serializerr   r   r   r   r   r   r   r   r   r   r   r=   r0   r.   <module>r	     s   & $ N G2Tk&A&A 6:k&A&A :>{'B'B .K$?$? *)D)D (;#>#> $;#>#> D( ; ; (
[-H-H 
+"8"8 .{:: *#K77 #9[%@%@ 9';#>#> 'T% ; ; %P	
{'B'B 	
+*E*E 6![88 !33 K$?$? r0   