
    vg"&                       d Z ddlZddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
mZ ddl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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZG ddlHmIZI ddlJmKZKmLZL ddlM ddlN ddlO ddlPmQZQmRZRmSZSmTZTmUZUmVZV ddlW ddlXmYZY ddlZm[Z[ d Z\eB eEd       d!               Z]d" Z^eB eEd#      d$               Z_eBe@ eCd#      d%                      Z`eBe@ eEd#      d&                      ZaeB eEd'      d(               ZbeB eEd)      d*               ZceBe@ eCd+      d,                      Zdd- ZeeBe@ eCd+      dd.                     ZfeB eCd/      d0               ZgeB eCd/      d1               ZheBe@d2               ZieBe@ eCd3      d4                      ZjeBe@ eCd5      d6                      ZkeB eCd3      dd7              ZleB eCd3      d8               ZmeB eCd3      d9               ZneB eCd3      dd:              ZoeBe@d;               ZpeBe@ eCd/      d<                      ZqeBe@ eCd=      d>                      ZreB eCd?      d@               ZseBe@ eCd?      dA                      ZteBe@ eCd?      dB                      ZueBe@ eCd=      dC                      ZveBe@ eCdD      dE                      ZweBe@ eCdF      dG                      Zx e*dHg       eEdF      dI               ZydJ ZzeB eCd=      dK               Z{eBdL        Z|eBe@dM               Z}eBe@ eEdN      dO                      Z~eBdP        ZeBe@dQ               ZeBe@ eEdR      dS                      ZeBe@ eEdT      dU                      ZeBe@ eEdT      dV                      ZeB eEdN      dW               ZeB eEdN      dX               ZeBe@dY               ZeBe@dZ               ZeBe@d[               ZeBd\        ZeBe@d]               ZeBd^        ZeBe@d_               ZeBe@d`               ZeB eCd/      da               ZeBdb        ZeB eEd5      dc               ZeBdd        ZeBde        ZeBdf        ZeBdg        ZeBdh        ZeBdi        ZeBdj        ZeBe@dk               ZeBdl        ZeBe@dm               ZeBe@dn               ZeBe@do               ZeBe@ e       dp                      ZeB e       dq               ZeBe@ e       dr                      ZeBe@ e       ds                      ZeBdt        ZeBdu        ZeB e*dHg       eCd5      dv                      ZeBdw        ZeBdx        Z e*dHg      eBdy               ZeBdz        ZeBd{        ZeBe@d|               ZeBe@ eCd}      d~                      ZeBe@d               ZeBe@d               ZeBe@d               ZeBe@d               ZeBe@d               ZeBd        ZeBe@d               ZeB eEd      d               ZeB eEd      d               ZeBe@d               ZeBd        Z ejr                  d      rddlWmZmZ eBd        ZeBd        ZeBe@d               ZeB e       d               ZeB e       e@d                      ZeB e       e@dd                     ZeB e       e@ eDded      d                             ZeB e       e@ eCd      d                             ZeB e       e@ eCd      d                             ZeB e       e@d                      ZeB e       e@d                      ZeB e       e@d                      Z ejr                  d      rd ZeB eEd      d               ZeBd        ZeBd        ZeBd        ZeBd        Zy)z

views.py
    N)defaultdict)datedatetime	timedelta)parse_qsunquote)apps)messages)	Paginator)transaction)ProtectedErrorQ)HttpResponseJsonResponse)get_object_or_404redirectrender)reverse	force_str)gettext)gettext_lazy)require_http_methods)PenaltyFilter)PenaltyAccountForm)	choosesubordinatesclosest_numberseval_validateexport_datafiltersubordinatesget_key_instancesget_paginationis_reportingmanagersortby)CompanyLeavesHolidaysPenaltyAccounts)Employee)hx_request_requiredloggerlogin_requiredmanager_can_enterowner_can_enterpermission_required)group_by_queryset)DYNAMIC_URL_PATTERNS)get_horilla_model_classremove_dynamic_url)*)attendance_dayscalculate_requested_dayscompany_leave_dates_list filter_conditional_leave_requestholiday_dates_listleave_requested_dates)LeaveMailSendThread)notifyc                 n   | D ]D  }|j                         D ]/  \  }}||v r|j                  ||          |j                  d       1 F |j                         D cg c]  \  }}t        d |D              s| }}}|D ]  }||=  t        j                  ||j                               }|j                  j                  d t        j                  ddddf         }t        d      d| d	d
<   t        j                  d      }	|j                  |	dd       |	j                  d   }
|
j                  dd       |	j                          fd}ddlm}m} dt$        j'                          |j                   ||             t)        j                         d S c c}}w )zG
    Function used to generate error excle file for imported datas
    Nc              3   $   K   | ]  }|d u  
 y wN ).0vs     /var/www/horilla/leave/views.py	<genexpr>z(generate_error_report.<locals>.<genexpr>O   s     7QaT	7Qs   columnsc                      y)Nztext-align: centerr?   )xs    rB   <lambda>z'generate_error_report.<locals>.<lambda>U   s        )subsetapplication/ms-excelcontent_typezattachment; filename=""Content-Disposition
xlsxwriter)engineFSheet1)index
sheet_namezA:Z   c                     t               S r>   )r2   )request	path_inforesponses    rB   get_error_sheetz.generate_error_report.<locals>.get_error_sheet_   s    9%rI   r   )pathurlpatternszerror-sheet-)namezleave/)itemsappendallpd	DataFramekeysstyleapplymap
IndexSlicer   ExcelWriterto_excelsheets
set_columnclose
leave.urlsr[   r\   uuiduuid4r0   )
error_list
error_data	file_nameitemkeyvaluekeys_to_remove
data_framestyled_data_framewriter	worksheetrZ   r[   r\   rX   rY   s                 @@rB   generate_error_reportrz   D   s     #$**, 	#JCd{T#Y'T"		## )..0UC7Q57Q4QN   sOj*//2CDJ"((11&r}}QT/B 2  )?@H(>yk&KH"#^^H\:FvUxHh'I#
LLN -tzz|n-ItIYGH	*$I7s   F1:F1zleave.add_leavetypec                 .   t               }| j                  dk(  rnt        | j                  | j                        }|j	                         r>|j                          t        j                  | t        d             t        t              S t        | dd|i      S )z
    function used to create leave type.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave type creation template
    POST : return leave view
    POSTzNew leave type Created..z)leave/leave_type/leave_type_creation.htmlform)LeaveTypeFormmethodr|   FILESis_validsaver
   success_r   leave_type_viewr   )rW   r}   s     rB   leave_type_creationr   l   ss     ?D~~W\\7==9==?IIKWa(B&CDO,,'FQUWWrI   c                 P    t        | t                     }|j                  |      } | S )z-
    function used to paginate query set
    )r   r"   get_page)qrysetpage_number	paginators      rB   paginator_qryr      s(     &."23I,FMrI   zleave.view_leavetypec           	      |   t         j                  j                         j                  d      }t        j                  j                         rFt        j                  j                         j                  rt         j                  j                         }| j                  j                  d      }t        ||      }| j                  j                         }t               }t        j                  t        |j                  dd                  }|j!                         sd}nd}t#        | |||j$                  ||d      S )	z
    function used to view leave type.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave type template
    T)is_compensatory_leavepageidflatz+leave/leave_type/leave_type_empty_view.htmlz%leave/leave_type/leave_type_view.html)leave_typesr}   ra   requests_ids)	LeaveTypeobjectsr`   excludeLeaveGeneralSettingfirstcompensatory_leaveGETgetr   	urlencodeLeaveTypeFilterjsondumpslistvalues_listexistsr   r}   )rW   querysetr   page_objprevious_dataleave_type_filterr   template_names           rB   r   r      s       $$&..T.JH##))+''--/BB$$((*++//&)KX{3HKK))+M')::d8#7#74#7#HIJL??E?#%**(		
	 	rI   c                 &   t         j                  |      }| j                  j                  d      }| j                  j                  d      }||d}|r3t	        j
                  |      }t        ||      \  }}||d<   ||d<   ||d<   t        | d|      S )z
    function used to view one leave type.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return one leave type view template
    instances_idscompensatory)
leave_typer   previousnextr   z0leave/leave_type/leave_type_individual_view.html)r   findr   r   r   loadsr   r   )	rW   r   r   requests_ids_jsonr   contextr   previous_idnext_ids	            rB   leave_type_individual_viewr      s     #J8;;??>2L'FGzz"34.|R@W)
!"3'MwWWrI   c           	         t         j                  j                         }| j                  j	                  d      }t        | j                  |      j                  }t        ||      }| j                  j                         }t        j                  t        |j                  dd                  }t        |      }t        t         |       t        | d||||d      S )z
    function used to filter view leave type.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave types template
    r   r   Tr   z!leave/leave_type/leave_types.html)r   ra   filter_dictr   )r   r   r`   r   r   r   qsr   r   r   r   r   r   r   r!   r   )rW   r   r   r   r   r   r   	data_dicts           rB   r   r      s       $$&H++//&)K'X>AA.<HKK))+M::d#4#@#@D#@#QRSL'Ii++#$(		
	 	rI   zleave.change_leavetypec                 h   	 t         j                  j                  |      }t        |      }| j                  j                  d      }t        }|rt        }| j                  dk(  rlt        | j                  | j                   |      }|j#                         r:|j%                          t        j&                  | t        d             t        |      S t)        | d||d      S # t         j                  t        t
        f$ r1 t        j                  | t        d             t        t              cY S w xY w)	z
    function used to update leave type.

    request (HttpRequest): The HTTP request object.
    id : leave type id

    Returns:
    GET : return leave type update template
    POST : return leave type view
    r   zLeave type not foundinstancer   r|   z$Leave type is updated successfully..z'leave/leave_type/leave_type_update.html)r}   r   )r   r   r   DoesNotExistOverflowError
ValueErrorr
   errorr   r   r   UpdateLeaveTypeFormr    compensatory_leave_settings_viewr   r|   r   r   r   r   r   )rW   r   kwargsr   r}   r   redirect_url	form_datas           rB   leave_type_updater      s   )&&**b*1
 
3D;;??>2L"L7~~'LL'--*
	 NNWa(N&OPL))1|4 ! ""M:> )w"8 9:(()s    C" "AD10D1zleave.delete_leavetypec           	      ,   	 t         j                  j                  |      j                          t	        j
                  | t        d             | j(                  j                  d      dk(  r| j(                  j                  d	      d
k(  rx| j*                  j                  d      }t-        j.                  |      }||v r|j1                  |       t3        t-        j.                  |      |      \  }}	t5        d|	 d|       S t5        d| j*                  j7                                S t5        t8              S # t         j                  t        t        f$ r# t	        j                  | t        d             Y )t        $ r}t               }|j                  D ]0  }|j                  t        |j                   j"                               2 dj%                  |      }t	        j                  | t        dj'                  |                   Y d}~d}~ww xY w)z
    function used to delete leave type.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave type id

    Returns:
    GET : return leave type view template
    r   z!Leave type deleted successfully..Leave type not found.,z*This leave types are already in use for {}NHTTP_HX_REQUESTtrueHTTP_HX_TARGETobjectDetailsModalTargetr   z"/leave/leave-type-individual-view/z?instances_ids=z/leave/type-filter?)r   r   r   deleter
   r   r   r   r   r   r   r   setprotected_objectsadd___metaverbose_namejoinformatMETAr   r   r   remover   r   r   r   )
rW   obj_idemodels_verbose_name_setsobjmodels_verbose_name_strr   instances_listprevious_instancenext_instances
             rB   leave_type_deleter     s   
(//1!$G"HI  ||)*f4<<,-1KK#KKOOO<M!ZZ6N'%%f-/>

=)60,} 4]O?SaRbc  -gkk.C.C.E-FGHHO$$9 ""M:> <w"9 :; 
#&5 && 	EC$((CII,B,B)CD	E#&**-E"F<CC+	
 	

s   AD8 8=H8H BHHleave.add_leaverequestc                 H   | j                   j                  d      }| j                   j                  d      r(| j                   j                  d      dk(  r
t               n	t               }|rat	        t
        |      }t        j                  j                  |j                  j                  dd            }||j                  d   _        n0t        j                  j                         |j                  d   _        t        d	|d|j                  d   d
      }t        |      S )Nemployee_idr}   LeaveRequestUpdationFormr   leave_type_idTr   id__inz)leave/leave_request/leave_type_field.html)r}   
field_namefield)r   r   r   LeaveRequestCreationFormr   r(   r   r   filteravailable_leaver   fieldsr   nonerender_to_stringr   )rW   r   r}   employeeassigned_leave_typesleave_type_field_htmls         rB   get_employee_leave_typesr   D  s     ++//-0K ;;??6"KKOOF#'AA 	!" &'	 	 $X+>(0077++77d7S  8  
 1EO$-090A0A0F0F0HO$-,3)[[1	
 -..rI   c                 H   t         j                  j                  |       }|j                  d      j                  d      }|j                  d      j                  d      }g }|D ]  }|j	                  |j
                          |j                         r	||||d}|S d}|S )Nleave_request_idFis_approvedsequenceT)managersapproved	requested	approvals)LeaveRequestConditionApprovalr   r   order_byr_   
manager_idr   )r   r   requested_queryapproved_queryr   managerresults          rB   multiple_approvals_checkr  d  s    -55<<b<QI&&5&9BB:NO%%$%7@@LNH ,**+, &("	
 M MrI   c                    | j                   j                  d      j                  d      D cg c]
  }|dk7  s	| }}| j                  j	                         j                  d      r0t        | j                  j	                               t        d      d }n?| j                  j                         }d|v r|j                  d       |j	                         }t               }| rw| j                  j                  }|r_|j                  j                         }	t        j                   j#                  |	j%                  dd	      
      }
|
|j&                  d   _        |r|r||d}t        |      }t+        | |d      }| j,                  dk(  rt        | j.                  | j0                        }t+        | |d      }|j3                         r|j5                  d      }d}|j6                  j8                  dk(  r|j:                  }|j6                  }t<        j                   j                  ||      }| j                  j                  |_        |j5                          |j@                  |jB                  kD  rM|j@                  |jB                  z
  }|jB                  |_"        d|_!        |jF                  |z
  |_#        ||_$        n/|jB                  |j@                  z
  |_!        |j@                  |_"        d|_%        |j5                          |r| j                  j                  |_        |j5                          tM        |jN                        rtM        |jN                        }g }|d   D ]  }|jQ                  |jR                          tU        jV                  tX              5  t[        j\                  | j                  j                  |d   ddddddd|jN                   	       ddd       t_        | |d      }|ja                          tc        jd                  | tg        d             tU        jV                  tX              5  t[        j\                  | j                  j                  |j:                  jh                  jj                  jR                  d |j:                   d!d"|j:                   d!d#|j:                   d!d$|j:                   d!d%|j:                   d!dtm        d&      d'|jN                   z   	       ddd       t               }|d(   d)k(  rto        d*      S tp        j                   j                         }t        |      d+k(  rto        d,      S | j                   j                  dd      }ddjs                  |j                  d      d-d       z   }|dk(  rtm        d.      }d/}nd0}d1}tu        | d2||||d3      S c c}w # 1 sw Y   xY w# 1 sw Y   xY w)4z
    function used to create leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave request form template
    POST : return leave request view
    HTTP_REFERER/ pd=Nconfirmr   Tr   r   r   r   initialr   r|   Fcommitnor   r   r   )You have a new leave request to validate.?   لديك طلب إجازة جديد يجب التحقق منه.3Sie haben eine neue Urlaubsanfrage zur Validierung.6Tiene una nueva solicitud de permiso que debe validar.4   Vous avez une nouvelle demande de congé à valider.people-circle/leave/request-view?id=	recipientverbverb_arverb_deverb_esverb_friconr   rW   type$Leave request created successfully..New leave request created for .0   تم إنشاء طلب إجازة جديد لـ u"   Neuer Urlaubsantrag erstellt für 'Nueva solicitud de permiso creada para (   Nouvelle demande de congé créée pour request-view?id=zemployee-view*<script>window.location.reload();</script>   )<script>window.location.reload()</script>   zleave-request-and-approvez#leaveApproveCardBody/leave/request-filter?z#leaveRequestz+leave/leave_request/leave_request_form.html)r}   ra   hx_url	hx_target);r   r   splitr   r   
startswithr   lencopypopr   useremployee_getr   r`   r   r   r   r   r   r   r   r   r|   r   r   r   r   require_approvalr   AvailableLeave
created_byrequested_daysavailable_daysapproved_available_dayscarryforward_daysapproved_carryforward_daysstatusr  r   r_   employee_user_id
contextlibsuppress	Exceptionr;   sendr:   startr
   r   r   employee_work_inforeporting_manager_idr   r   LeaveRequestr   r   )rW   type_idemp_idpartreferer_partsr   request_copyr}   r   available_leavesr   initial_dataleave_requestr   r   r   r   leaveconditional_requestsr   r  mail_threadleave_requestsreferrerr3  r4  s                             rB   leave_request_creationr[  w  su    !)).9??DPR
M  {{))%0 5 5 78UF{{'')$Y'$..0#%D<<,,'77;;=#,#4#4#;#;'33O$3O $< $  5IDKK(16$!
 (=gt-EFD~~'gmmD!'41IJ==? IIUI3MD**;;tC+77 - ; ;"0"8"8"<"<"/[ #= # ,3<<+D+D(""$ ///2P2PP%447U7UU  (66 "9 67O2'99EA $5 @EM< (669U9UU $2 =J<X<XM9'1$$$&+2<<+D+D(""$+M,<,<=+CMDTDT+U(!H#7
#C B (@(@AB#,,Y7 #LL55&.qk!L$e$Y$\$Z!0'>}?O?O>P%Q
 2] !!#  !,R*ST((3 KK11"/";";"N"N"c"c"t"t=m>W>W=XXYZ"RS`SlSlRmmn o"D]E^E^D__` a"I-JcJcIdde f"J=KdKdJeef g,!(!8T-BRBRAS;T!T
 01 $7'(TUU)11557N>"a'#$OPP||3HSXXhnnS1!"566H345+	)#	5"		
	 	eJ $ s$   
WWAW B:WWWleave.view_leaverequestc                    t        | j                        j                  j                  d      j	                         }t        |       j	                         }t        | |d      }| j                  j                  st        j                  j                  dd      }|D  cg c]  } | j                  j                   }} |D cg c]  }|j                  |vs|j                   }}t        j                  j                  |      j	                         }||z  } j                  j                  d      }t!        ||      }t               }	|}
g }t#        j$                  d      re|
D ]`  }t'        dd	      }|j                  j                  |j(                  |j*                  |j,                  g
      }|sP|j/                  |       b |j                  d      j1                         }t3        j4                  t7        |j8                  j;                  dd                  }|j                  d      j1                         }|j                  d      j1                         }| j                  j=                         }t?        |      }tA        t        |       tC        | d|||	jD                  |||tF        jH                  |tK        jL                         ||d      S c c} w c c}w )z
    function used to view leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave request view template
    -idr\  Fr   is_rejectedr   r   recruitmentinterviewschedule	app_labelmodelr   interview_date__ranger   rD  r   Tr   r   	cancelledz%leave/leave_request/request_view.html)rY  ra   r}   requestsapproved_requestsrejected_requests	gp_fieldsr   current_dater   leave_requests_with_interview)'LeaveRequestFilterr   r   r  distinctr7   r    r:  is_superuserr   r   r   r   r   rM  r   r   r	   is_installedr1   r   
start_dateend_dater_   countr   r   r   object_listr   r   r   r!   r   r}   LeaveRequestReGroupr   r   today)rW   r   multiple_approvalsnormal_requestsmulti_approve_requests	multi_idsrV  r   r   leave_request_filterrY  ro  rU  InterviewSchedule
interviewsrj  r   rk  rl  r   r   s                        rB   leave_request_viewr    s    "'++.11::5AJJLH9'BKKM((<UVO<<$$!>!F!F!M!M5 "N "
 AWWWW--00W	W #2
UXXY5NEHH
 

 '..55_5MVVX!33H++//&)KX{3H-/ N$&!'+ 	DM !8'/B! +2299)55!,,!**' : J -44]C!	D$ k288:H::d8#7#7#C#CDt#C#TUVL z:@@B {;AACKK))+M'IlI./&(-- !2!2,33( JJL$-J	
 [ X
s   KKKc                     | j                   j                  d      dk(  r1t               }t               }||j                  d}t        | d|      S t        | t        t        t        d      S )Nr   r   )excel_columnexport_filterz5leave/leave_request/leave_requests_export_filter.htmlr   Leave_requestsrW   re  filter_class
form_classrq   )r   r   LeaveRequestExportFormrp  r}   r   r   rM  )rW   r  r  r   s       rB   leave_requests_exportr  X  su     ||)*f4-/*,(*//

 C
 	

 ')" rI   c                    | j                   j                         }t        | j                         j                  j	                  d      }|}g }t        j                  d      re|D ]`  }t        dd      }|j                  j                  |j                  |j                  |j                  g      }|sP|j                  |       b | j                   j                  d      }t        |       }	t!        | |d      }| j"                  j$                  st&        j                  j                  dd	      }
|
D  cg c]  } | j(                  j*                   }} |D cg c]  }|j*                  |vs|j*                   }}t,        j                  j                  |
      }|j/                         }|	j/                         }	||	z  }t         j                   |      j                  }| j                   j                  d      }d}| j                   j                  d      rt1        | |d      }|dk7  r|t3        ||| j                   j                  d      d      }|D cg c]  }|d   	 }}g }|D ].  }|j4                  D ]  }|j                  |j*                          0 t7        j8                  t;        |            }d}n\t=        || j                   j                  d            }t7        j8                  |j4                  D cg c]  }|j*                   c}      }g }| j                   j                  d      st?        |      }tA        t,        |       d|v r|d   }tC        |      dkD  r	|d   g|d<   tE        | |||||| j                   j                  d      |tG        jH                         |d      S c c} w c c}w c c}w c c}w )z
    function used to filter leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave request view template
    r^  ra  rb  rc  rf  r   r\  Fr_  r   r   )z'leave/leave_request/leave_requests.htmlr$   r  r   z!leave/leave_request/group_by.html	dashboardrD  r/  )rY  ra   r   r   r  r   rn  ro  )%r   r   rp  r   r  r	   rs  r1   r   r   r   rt  ru  r_   r   r7   r    r:  rr  r   r   r   rM  rq  r$   r/   rw  r   r   r   r   r   r!   r7  r   r   ry  )rW   r   r   rY  ro  rU  r  r  r   rz  r|  r}  rV  r~  r   templateentrylist_valuesid_listrt   r   r   r   status_lists                           rB   r~  r~  q  s    KK))+M!'++.11::5AH N$&!'+ 	DM !8'/B! +2299)55!,,!**' : J -44]C!	D$ KKOOG$E9'B!'85NOH<<$$!>!F!F!M!M5 "N "
 AWWWW--00W	W +3Pehhi6OEHHPP  ''..h.?  "H+446,,H-gkk8DGG++//&)K;H{{x %g/CXN{u(0 %)@& 
 3GGuV}GG  	,E!-- ,x{{+,	, zz$w-06  - '++//&"9 
 zz)=)I)IJXX[[J
 I;;??;']+	,	29){a#.r?"3Ih2$ 5( JJL-J		
 c X Q& H Ks   5N1N6,N6N;>O leave.change_leaverequestc                 r   t         j                  j                  |      }|j                  }|j                  }t        |      }|r|j                  j                         }t        j                  j                  |j                  dd            }||j                  dd      vr-|t        j                  j                  |j                        z  }||j                  d   _        t        | |d      }| j                  d	k(  rt        | j                   | j"                  |      }t        | |d      }|j%                         rX|j'                  d
      }d}|rA|j'                          t)        j*                  | t-        d             t/        j0                  t2              5  t5        j6                  | j8                  j:                  |j                  j<                  j>                  j@                  d|j                   dd|j                   dd|j                   dd|j                   dd|j                   ddtC        d      d|j                   z   	       ddd       tE        | d||d      }	tG        |	jH                  jK                  d      dz         S tE        | d||d      S # 1 sw Y   PxY w)z
    function used to update leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave request id

    Returns:
    GET : return leave request update template
    POST : return leave request view
    r   r   r   Tr   r   r   r   r|   Fr  z'Leave request is updated successfully..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 r  r+  r,  r  Nz,leave/leave_request/request_update_form.htmlr}   r   utf-8#<script>location.reload();</script>)&rM  r   r   r   r   r   r   r`   r   r   r   r   r   r   r   r   r|   r   r   r   r
   r   r   rF  rG  rH  r;   rI  r:  r;  rK  rL  rE  r   r   r   contentdecode)
rW   r   rU  r   r   r}   rS  r   r   rY   s
             rB   leave_request_updater    s    !((,,,3M!//M((H#];D#33779(0077#//d/K  8  
  4 @ @D @ QQ#7):K:K:R:R ## ;S ; $  1EO$-gt-EFD~~'LL'---
 "'41IJ==? IIUI3MD""$  !,U*VW((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,!(!8T-BRBRAS;T!T
 "B!,
 $$$++G4;< 
 6	
 - s   $B:J--J6zleave.delete_leaverequestc                    | j                   j                         }	 t        j                  j	                  |      }t        j                  | t        d             |j                          | j                  j	                  dd      }|dk(  rGt        j                  j                         }|j!                         rt#        d|       S t%        d	      S t#        t&              S # t        j                  t        t        f$ r" t        j                  | t        d             Y t        $ r" t        j                  | t        d             Y w xY w)
z
    function used to delete leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave request id

    Returns:
    GET : return leave request view template
    r   $Leave request deleted successfully..Leave request not found.Related entries existsr   NleaveRequestr2  r.  )r   r   rM  r   r   r
   r   r   r   r   r   r   r   r   r   r`   r   r   r   r  )rW   r   r   rU  r4  rY  s         rB   leave_request_deleter  ,  s    KK))+M=$,,00B07!$J"KL
   !148IN"%--113  "4]ODEE LMM&'' %%}jA ?w"< => =w": ;<=s   AC" "=E!'E
Ec                    t         j                  j                  |      }|j                  }|j                  }t
        j                  j                  ||      }|j                  |j                  z   }|j                  dk7  r||j                  k\  r\|j                  |j                  kD  rM|j                  |j                  z
  }|j                  |_
        d|_        |j                  |z
  |_        ||_        n1|j                  }	|	|j                  z
  |_        |j                  |_
        d|_        |j                         s$t        t
        |;          |j                          n| j                  j                   rTt"        j                  j%                  |      j'                  d       t        t
        |;          |j                          na|j                         }
|
d   D cg c]  }|j(                  | j                  k(  r| }}t"        j                  j%                  |d   |	      j+                         }d|_        g }|
d   D ]  }|j/                  |j(                          t1        |      |j2                  kD  rnt5        j6                  t8              5  t;        j<                  | j                  j>                  ||j2                     d
dddddd|j@                   	       ddd       |j                          |d   |
d   d   k(  r"t        t
        |;          |j                          tC        jD                  | tG        d             t5        j6                  t8              5  t;        j<                  | j                  j>                  |j                  j(                  ddddddtI        d      d|j@                   z   	       ddd       tK        | |d      }|jM                          n9tC        jN                  | | d       ntC        jN                  | tG        d             ||}tQ        d | d!      S tS        | jT                  j                  d"d!            S c c}w # 1 sw Y   xY w# 1 sw Y   xY w)#a  
    function used to approve a leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave request id
    emp_id : employee id if the approval operation comes from "/employee/employee-view/{employee_id}/" template.


    Returns:
    GET : If `emp_id` is provided, it returns to the "/employee/employee-view/{employee_id}/" template after approval.
          Otherwise, it returns to the default leave request view template.
    r   r  r   r   r   Tr   r   r  r   r  r  r  r  r  r  r  r  Nr  z%Leave request approved successfully..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éeuser-request-viewr,  approver#  z5 dont have enough leave days to approve the request..zLeave request already approved/employee/employee-view/r
  r	  )+rM  r   r   r   r   r=  r@  rB  rD  r?  rA  rC  rz  superr   r:  rr  r   r   updaterE  r   r   r_   r7  r   rF  rG  rH  r;   rI  r;  r   r
   r   r   r   r:   rJ  r   r   HttpResponseRedirectr   )rW   r   rO  rU  r   r   r   total_available_leaverV  temprW  r  approvercondition_approvalr   rX  s                   rB   leave_request_approver  M  s      !((,,,3M++K!//M$,,00# 1 O 	&&)J)JJ  z) M$@$@@++o.L.LL%447U7UU8G8V8V512.#55=  1 <A8&55158T8T1T.8E8T8T5#-M  335no;=""$<<,,199@@)6 A ff../?A!&&(+8+K+K+M( (<J'G #"33w||C   H  
 *G)N)N)U)U#+A; *V *eg ' 6:&2!H#7
#C B (@(@AB8}'9'B'BB'00; "KK ' 9 9*23E3N3N*O%P(i(](`(^%4+B=CSCSBT)U
 '++-{&::&Fr&JJnoCE%**,Wa(O&PQ$$Y/ LL--+77HH?b?DH($%89d=CSCSBT<UU
 .g}9UKNN-TU
 	w"B CD2;-qABB 0 0 EFFq  $ s    &"Q AQ%(A Q2%Q/2Q;c                 X   | j                   dk(  r| j                  j                  d      }|D ]  }	 |r)t        j                  j                  t        |            nd }|j                  dk(  rb|j                  t        j                         j                         k\  s| j                  j                  d      rt        | |j                         n	|j                  dk(  rDt!        j"                  | t%        d      j'                  |j(                  |j*                               n|j                  t        j                         j                         k  rDt!        j,                  | t%        d      j'                  |j(                  |j*                               nCt!        j,                  | t%        d	      j'                  |j(                  |j*                                t7        d      S # t.        t0        t        j2                  f$ r# t!        j4                  | t%        d
             Y w xY w)Nr|   idsr   r   r  r   z{} {} request already approvedz{} {} request date exceededz{} {} can't approve.zLeave request not foundr.  )r   r|   getlistrM  r   r   intrD  rt  r   ry  r   r:  has_permr  r   r
   infor   r   r   r   warningr   r   r   r   r   rW   request_ids
request_idrU  s       rB   leave_request_bulk_approver    s    ~~ll**51% "	J!DNL((,,J,@TX  !'';6!,,0@0E0E0GG||,,-HI)'=3C3CD$++z9 #>?FF - 9 9=;V;V '11HNN4D4I4I4KK ((#;<CC - 9 9=;V;V !((#45<< - 9 9=;V;V5"	F DEE |/H/HI w*C(DEs   F'G((=H)(H)c                     | j                   j                  d      }|D ]E  }|r)t        j                  j	                  t        |            nd }t        | |j                         G t        d      S )Nr  r   r.  )	r|   r  rM  r   r   r  leave_request_cancelr   r   r  s       rB   leave_bulk_rejectr    sk     ,,&&}5K! 8
<FL  $$J$8D 	 	Wm&6&67	8 DEErI   c                    t               }| j                  dk(  rt        | j                        }|j                         rt        j
                  j                  |      }|j                  }|j                  }t        j
                  j                  ||      }|j                  dk7  rK|xj                  |j                  z  c_        |xj                  |j                  z  c_        d|_        d|_        d|_
        d|_        |j!                         r| j"                  j$                  s|j!                         }|d   D 	cg c]  }	|	j&                  | j"                  k(  r|	 }
}	t(        j
                  j+                  |
d   |      j-                         }d|_        d	|_        |j3                          |j4                  d
   |_        |j3                          |j3                          t9               }||_        | j"                  j<                  |_        |j6                  |_        |j3                          tA        jB                  | tE        d             tG        jH                  tJ              5  tM        jN                  | j"                  j<                  |j                  j&                  ddddddtQ        d      d|jR                   z   	       ddd       tU        | |d      }|jW                          ntA        jX                  | tE        d             ||}t[        d| d      S t]        d      S t_        | d||d      S c c}	w # 1 sw Y   zxY w)a  
    function used to Reject leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave request id
    emp_id : employee id if the cancel operation comes from "/employee/employee-view/{employee_id}/" template.

    Returns:
    GET : If `emp_id` is provided, it returns to the "/employee/employee-view/{employee_id}/" template after cancel.
          Otherwise, it returns to the default leave request view template.

    r|   r   r  rejectedr   r   r  FTreasonz%Leave request rejected successfully..z%Your leave request has been rejected.u1   تم رفض طلب الإجازة الخاص بكz!Ihr Urlaubsantrag wurde abgelehntz)Tu solicitud de permiso ha sido rechazadau(   Votre demande de congé a été rejetéer  r  r,  r  Nrejectr#  zLeave request already rejected.r  r
  r  z$leave/leave_request/cancel_form.htmlr  )0
RejectFormr   r|   r   rM  r   r   r   r   r=  rD  r@  rA  rB  rC  leave_clashes_countrz  r:  rr  rE  r   r   r   r   r`  r   cleaned_datareject_reasonLeaverequestCommentr  r;  commentr
   r   r   rF  rG  rH  r;   rI  r   r   r:   rJ  r   r   r   r   )rW   r   rO  r}   rU  r   r   r   rW  r  r  r  r  rX  s                 rB   r  r    s      <D~~',,'==?(00444;M'33K)77M,4488+ 9 O ##z1..-2W2WW.11!<<1 9:5;<8'1$451 335gll>W>W+8+K+K+M( (<J'G #"33w||C   H  
 *G)N)N)U)U#+A; *V *eg ' 6;&259&2&++-.2.?.?.I+""$$$&-/%2"&-ll&?&?#"/"="=  !,S*TU((3 KK11"/";";"L"LD S C K J,!()<!= !1!1 23"4 2'=xX!!#w*K(LM!$":;-q IJJ EFF7$b9Q [ , s   "M.A MMc                 D   t         j                  j                  |      }|j                  }|j                  j
                  | j                  j
                  k(  rt        j                         }|j                  dk(  r|j                  |k\  rt               }| j                  dk(  rt        | j                        }|j                         rs|j                  d   |_        d|_	        |j#                          t%        j&                  | t)        d             t+        | |d      }|j-                          t/        d	      S t1        | d
||d      S t%        j2                  | t)        d             t/        d	      S t%        j2                  | t)        d             t/        d	      S )z
    function used to cancel approved leave request by employee.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave request id

    Returns:
    GET :  it returns to the default my leave request view template.

    r   r   r|   r  ri  z&Leave request cancelled successfully..cancelr#  r  z)leave/leave_request/user_cancel_form.htmlr  z$You can't cancel this leave request.zYou don't have the permission.)rM  r   r   r   rE  r   r:  r   ry  rD  ru  r  r   r|   r   r  r  r   r
   r   r   r:   rJ  r   r   r   )rW   r   rU  r   rn  r}   rX  s          rB   user_leave_cancelr  M  s_    !((,,,3M++K##&&',,//9zz|  J.&&,6<D~~'!',,/==?262C2CH2MM/+6M(!&&($$#K!L #6X#K  %%''(MNN;R( 
 	w"H IJABBNN7A>?@=>>rI   c                 ^   t         j                  j                  |      }|t        j                         | j
                  j                  d      d}| j
                  j                  d      }|r3t        j                  |      }t        ||      \  }}||d<   ||d<   ||d<   t        | d|      S )	z
    function used to view one leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return one leave request view template
    r   r  )rU  rn  r  r   r   r   r   z)leave/leave_request/one_request_view.html)
rM  r   r   r   ry  r   r   r   r   r   )rW   r   rU  r   r   r   r   r   s           rB   one_request_viewr  ~  s     !((,,,3M&

[[__[1G
  8zz"34.|R@W)
!"3'FPPrI   leave.add_availableleavec                    t               }t        | |d      }t        j                  j	                  |      j                         }|s/t        j                  | t        d             t        | d||d      S | j                  dk(  r|j                  r/t        j                  | t        d             t        | d||d      S t        t        t        | j                   j#                  d                  }t%        t&        j                  j	                  ||	      j)                  dd
            }|j*                  r|j*                  nd}t        t%        |      |z
        }d}|rg }	|D ]  }
t'        ||
|j,                        }|j.                  .|j0                  r"|j3                  |j4                  |      |_        |j6                  dk(  r|s|j4                  }||_        t;        |j<                  |j>                  z   d      |_         t;        |j>                  d      |_        |	jC                  |        t&        j                  jE                  |	       tG        |	      }t        jH                  | t        d      jK                  |             t               }tL        j                  j	                  |      jO                  dd      }|D cg c]G  }tQ        jR                  | jT                  jV                  |jX                  ddddddt[        d      	      I }}tG        |      |k7  r:t        j                  | t        d      jK                  tG        |      |z
               t        | d||d      S c c}w )a   
    Assigns leave types to employees.

    Parameters:
    request (HttpRequest): The HTTP request object.
    obj_id: ID of the leave type.

    Returns:
    GET: Renders the leave type assignment form template.
    POST: Processes and assigns the leave type to selected employees.
    r  r   r   z-leave/leave_assign/leave_assign_one_form.htmlr  r|   z4Compensatory leave type cannot be assigned manually.r   )r   employee_id__inTr   Nr   )r   employee_id_idr@  )assigned_dater   carryforward expirez1Successfully assigned leave type to {} employees.r   r   rE  !New leave type is assigned to you/   تم تعيين نوع إجازة جديد لكz+Ihnen wurde ein neuer Urlaubstyp zugewiesenz*Se le ha asignado un nuevo tipo de permiso0   Un nouveau type de congé vous a été attribuér  r  r  z=Leave type is already assigned to some selected {} employees.).LeaveOneAssignFormr   r   r   r   r   r
   r   r   r   r   r   r  r   mapr  r|   r  r   r=  r   carryforward_expire_date
total_days
reset_dateresetset_reset_dater  carryforward_typeexpired_datemaxr@  rB  total_leave_daysr_   bulk_creater7  r   r   r(   onlyr;   rI  r:  r;  rE  r   )rW   r   r}   r   employee_idsexisting_leaves_setexpiry_datenew_employeesassigned_countrS  r   rV  	employeesr   notificationss                  rB   leave_assign_oner    sb    Dgt-GHD ""))V)4::<Jw"9 :;;(
 	
 ~~++MMQR ?V,  CW\\%9%9-%HIJ!""))(, * k-dk3
 22 // 	
 S.1DDE!, /&",#.#-#8#8
 ##+!''+0+?+?*/*=*=u ,@ ,( //3HH&&+&9&9)4E&),((5+B+BBA*& +.e.E.Eq*I' ''.+/. ""../?@ !12NEFMM" &'D ((//}/EJJ(I !*  LL--&77<MIHN($%89
M  |.MMS&\*^;<	 7V$ /s   AM4leave.view_availableleavec                    t        | t        j                  j                         d      }| j                  j                         xs d}| j                  j                  dd      }| j                  j                  d      }t        |j                  d      ||      }t        j                  |D cg c]"  }|d   j                  D ]  }|j                   $ c}}      }| j                  j                         | _        d| j                  d<   t        | d	|t               |t!        |      t"        j$                  t'               |d
      S c c}}w )z
    Function to view assigned employee leaves.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave assigned view template
    r  field=leave_type_idr   r   r   r^  r   Tz#leave/leave_assign/assign_view.html)rS  fra   r   rm  assign_formavailable_leave_ids)r    r=  r   r`   r   r   r   r/   r  r   r   rw  r   r8  r   AssignedLeaveFilterr   LeaveAssignReGroupr   AssignLeaveForm)	rW   r   r   r   r   r   r  r   r  s	            rB   leave_assign_viewr    s    "''++-/JH KK))+D/DMKKOOG_5E++//&)K !!2!25!95+NH**"*U5=;T;TUxUU
 ++""$GKGKK- ($&#M2+22*,#6	
  	Vs   /'E
c                    | j                   j                         }|j                  dd        |j                         }t        j
                  j                  |      j                         }t        j                  | j                   j                  dd            }|rt        ||      nd\  }}|||t        j                  |      |d}t        | d|      S )Nr   r   z[]NN)r   r   r   instance_ids_jsonra   z*leave/leave_assign/single_assign_view.htmlr  )r   r8  r9  r   r=  r   r   r   r   r   r   r   r   r   )	rW   r   get_datar   r   instance_idsr   r   r  s	            rB   available_leave_single_viewr  D  s     {{!HLL$'&&(M$,,33v3>DDFO::gkkoootDEL1=f-< %}
 +.&!ZZ5G =w rI   c                 *   t         j                  j                         }t               }t	        | |d      }t        | j                  |      j                  }| j                  j                         }| j                  j                  d      }| j                  j                  d      }d}|j                  d      }| j                  j                  d      rDt        | |d      }t        j                  t        |d      D 	cg c]  }	|	j                   c}	      }
|dk7  rw|ut!        |||      }|D cg c]  }|d	   	 }}g }|D ].  }|j"                  D ]  }	|j%                  |	j                          0 t        j                  t'        |            }
d
}nCt        j                  t        |d      D 	cg c]  }	|	j                   c}	      }
t        ||      }t)        |      }t+        t         |       t-        | |||||||
d      S c c}	w c c}w c c}	w )z
    function used to filter assign leave type to employees.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave type assigned view template
    r  r   r   )z&leave/leave_assign/assigned_leave.htmlr^  r$   Nr  r   z leave/leave_assign/group_by.html)rS  ra   r   r   r  r  )r=  r   r`   r  r    r  r   r   r   r   r  r$   r   r   r   r   r/   rw  r_   r   r   r!   r   )rW   r   r  assigned_leave_filterr   r   r   r  rS  r   r  r   r  r  r  rt   r   s                    rB   leave_assign_filterr  ^  s    %%))+H!#K!'85PQH/XFIIKK))+MKKOOG$E++//&)K:H,55e<{{x !'+;XF"jj)67G)NOXX[[O
 {u($%5ukJ2:;uV};;  	,E!-- ,x{{+,	, #jjg75"jj)67G)NOXX[[O
 !!1;?'Ini0 ($&#6	
 ' P < Ps   >H0H1Hc                    t               }t        | |d      }t        j                  j	                         dk(  }| j
                  dk(  r[| j                  j                  d      }| j                  j                  d      }|r|rt        j                  j                  |      }t        j                  j                  |      }t        t        j                  j                  ||      j                  dd            }g }t               }	t               }
|D ]  }|D ]|  }|j                  |j                  f}||vrC|j                  t        |||j                               |	j!                  |j"                         b|
j!                  |j"                         ~  |rt%        j&                         5  t        j                  j)                  |       |	D ]_  }t+        j,                  t.              5  t1        j2                  | j4                  j6                  |d	d
ddddt9        d      	       ddd       a t;        j<                  | t?        d             ddd       |
r7t;        j@                  | t?        d      jC                  tE        |
                   |rtG        d      S tI        | dd|i      S # 1 sw Y   xY w# 1 sw Y   jxY w)z
    Function to assign multiple leave types to employees.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET: Render the leave assign form template.
    POST: Handle the leave type assignment.
    r  r   r|   r   r   r   )leave_type_id__inr  r   r   r@  r  r  z)Dir wurde ein neuer Urlaubstyp zugewiesenz*Se te ha asignado un nuevo tipo de permisor  r  r  r  Nz"Leave types assigned successfully.z7Some leave types were already assigned to {} employees.r0  z)leave/leave_assign/leave_assign_form.htmlr  )%r  r   r=  r   rv  r   r|   r  r   r   r(   r   r   r   r_   r  r   rE  r   atomicr  rF  rG  rH  r;   rI  r:  r;  r   r
   r   r   r  r   r7  r   r   )rW   r}   page_reloadleave_type_idsr  r   r  existing_assignmentsnew_assignmentssuccess_messagesinfo_messagesr   r   assignment_keyuser_ids                  rB   leave_assignr	    s    Dgt-GHD ((..0A5K~~ --o>||++M:l#++22.2IK ((//|/DI#&&&--&4l . +o}=$  !O"uEM% E"- EJ&0mmX[[%AN%-AA'..*.8,4/9/D/D ),,X-F-FG%))(*C*CDEE   '') W"**66G#3 '00; "KK ' 9 9*1%H(Y(S(T(Z%4)01D)E
  $$Wa0T.UVW" OPWWM*  KLL<}d>S 3 W Ws$   3>J?1<J3-)J?3J<8J??Kzleave.change_availableleavec                 
   t         j                  j                  |      }t        |      }| j                  j                         xs d}| j                  dk(  rt        | j                  |      }|j                         r|j                         }t        j                  | t        d             t        j                  t              5  t!        j"                  | j$                  j&                  |j(                  j*                  d|j,                   dd|j,                   d	d
|j,                   dd|j,                   dd|j,                   ddt/        d      	       ddd       t1        | d|||d      S # 1 sw Y   xY w)a,  
    function used to update available leave of an assigned leave type of an employee.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : available leave id

    Returns:
    GET : return available leave update form template
    POST : return leave type assigned  view
    r   r   r  r|   z(Available leaves updated successfully...zYour z leave type updated.u&   تم تحديث نوع الإجازة u    الخاص بك.zIhr Urlaubstyp z wurde aktualisiert.z%Se ha actualizado su tipo de permiso r'  u   Votre type de congé u    a été mis à jour.r  r  r  Nz-leave/leave_assign/available_update_form.htmlr}   r   ra   )r=  r   r   AvailableLeaveUpdateFormr   r   r   r|   r   r   r
   r   r   rF  rG  rH  r;   rI  r:  r;  r   rE  r   r   r   )rW   r   r	  r}   r   r   s         rB   available_leave_updater    s_    "))---4L#\:DKK))+D/DM~~'|L==?"iikOWa(R&ST$$Y/ LL---99JJ !>!> ??STD_EbEbDcctu-o.K.K-LL`aCODaDaCbbcd3O4Q4Q3RRgh($%89
 7R}5  s   
BE99Fzleave.delete_availableleavec           
         | j                   j                         }	 t        j                  j	                  |      j                          t        j                  | t        d             | j                   j	                  d      x}r`t        j                  |      }t        ||      \  }}||v r|j                  |       t!        d| d| dt        j"                  |             S t        j                  j%                         st'        d	      S t!        d
|       S # t        j                  $ r" t        j                  | t        d             Y t        $ r# t        j                  | t        d             Y w xY w)a  
    Function to delete an assigned leave type of an employee.

    Parameters:
    - request (HttpRequest): The HTTP request object.
    - obj_id (int): Available leave ID.

    Returns:
    - Redirects to the assigned leave type view or refreshes the page.
    r   z$Assigned leave successfully deleted.Assigned leave not found.zRelated entries exist.r   z#/leave/available-leave-single-view/z/?z&instances_ids=r0  z/leave/assign-filter?)r   r   r=  r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   )rW   r   ra   r   r   r   r   s          rB   leave_assign_deleter    sM    
			 B=""f"-446!$J"KL  88}8M2+:>6+R(=^#!!&)1-2$oVZV`V`aoVpUqr
 	
 !!((*GHH+B4011! && @w"= >? =w": ;<=s   AD 2E<'E<;E<r|   c                    | j                   d   }t        j                  |      }d}|D ]8  }	 t        j                  j                  |      }|j                          |dz  }: t        j                  | t        d      j                  |             t        dd	i      S # t        $ r)}t        j                  | t        d             Y d}~d}~ww xY w)
z?
    This method is used to delete bulk of assigned leaves
    r  r   r   r/  r  Nz({} assigned leaves deleted successfully messageSuccess)r|   r   r   r=  r   r   r   rH  r
   r   r   r   r   r   )rW   r  rv  assigned_leave_idassigned_leaver   s         rB   leave_assign_bulk_deleter  >  s     ,,u
C
**S/CE  D	D+3377;L7MN!!#QJE	D =>EEeL I.//  	DNN7A&A$BCC	Ds   5B	C(CCc                     	 ddg}t        j                  |      }t        d      }d|d<   |j                  |d	       |S # t        $ r}t        |      cY d
}~S d
}~ww xY w)z
    Generate an empty Excel template for asisgn leave type to employee with predefined columns.

    Returns:
        HttpResponse: An HTTP response containing an empty Excel template with predefined columns.
    Employee Badge ID
Leave TyperD   rK   rL   z3attachment; filename="assign_leave_type_excel.xlsx"rO   F)rS   N)ra   rb   r   rh   rH  )_requestrE   rv   rY   	exceptions        rB   assign_leave_type_excelr  T  sr    '
 \\'2
-CDA 	&' 	HE2 'I&&'s   ?A 	A 
AA A c                 &   g g g g g g d}| j                   dk(  r| j                  d   }t        j                  |      }|j	                  d      }t
        j                  j                         D ci c]  }|j                  j                         | }}t        j                  j                         D ci c]  }|j                  j                         | }}t        j                  j                         D 	ci c]/  }	|	j                  j                  |	j                  j                  f|	1 }
}	g }g }|D ]U  }|j!                  dd      j#                         j                         }|j!                  dd      j#                         j                         }|j!                  |      }|j!                  |      }g }||j%                  t'        d	             ||j%                  t'        d
             |r6dj)                  d |D              |d|d   v rdnd<   |j%                  |       |j                  |j                  f|
v r!t'        d      |d<   |j%                  |       /|j%                  t        |||j*                               X |rt        j                  j-                  |       d}|rt/        ||d      }t1        |      t1        |      z
  t1        |      t'        d      |d}t3        d|      }t5        |      S yc c}w c c}w c c}	w )a  
    This function accepts a POST request containing an Excel file with assigned leave type to employee data.
    It processes the data, checks for errors, and either assigns leave types to employees
    or generates an error report in the form of an Excel file.
    )r  r  Badge ID ErrorLeave Type ErrorAssigned ErrorzOther Errorsr|   assign_leave_type_importrecordsr  r  r  NzThis badge id does not exist.zThis leave type does not exist. c              3   2   K   | ]  }t        |        y wr>   r   )r@   r   s     rB   rC   z+assign_leave_type_import.<locals>.<genexpr>  s     B%Yu-Bs   zbadge idr   r  r  z5Leave type has already been assigned to the employee.r   r  zAssignLeaveError.xlsxzAssigned Leaves)created_counterror_countre  rX   zimport_popup.html)r   r   ra   
read_excelto_dictr(   r   r`   badge_idlowerr   r]   r=  r   r   r   r   stripr_   r   r   r  r  rz   r7  r   r   )rW   rp   filerv   assign_leave_dictsempr  ltr   alrS  assign_leave_listro   assign_leaver)  assign_leave_typer   r   errorsrX   r   htmls                         rB   r!  r!  k  s     J ~~}}78]]4(
'//	: ;C:J:J:N:N:PQ3S\\'')3.Q	Q5>5F5F5J5J5LMrrww}}*MM %,,002
   ".."3"34b8
 

 
. !	L#''(;R@FFHNNPH , 0 0r B H H J P P R }}X.H$):;JFa ?@A!a ABC HHB6BB (2fQi(?$EW !!,/ x{{+/??12K2-. !!,/ $$", (#-#8#87!	H ""../@A 	-J(?I
 !!34s:Fz?()"	
   3W=D!!K   RM
s   /"L3"L	74Lc                     | j                   j                  d      }|r't               }t               }||d}t	        | d|      S t        | t        t        t        d      S )Nr   )r  export_columnz3leave/leave_assign/assigned_leaves_export_form.htmlr  Assign_Leaver  )r   r   r  AvailableLeaveColumnExportFormr   r   r=  )rW   
hx_requestr  r7  r  s        rB   assigned_leaves_exportr;    sm    !!"34J+-68**
 A
 	

 (1  rI   c                     | j                   j                  d      }t               }t        j                  j                  |      |j                  d   _        t        | dd|i      S )N
department)department_idjob_positionzleave/job_position_field.htmlr}   )	r   r   RestrictLeaveFormJobPositionr   r   r   r   r   )rW   r>  r}   s      rB   get_job_positionsrB    s_     KKOOL1MD+6+>+>+E+E# ,F ,DKK( ':VTNKKrI   zleave.add_restrictleavec                     | j                   j                         }|j                  d      rt        |t	        d      d       }nt        |      }t               }| j                  dk(  rt        | j                        }|j                         rs|j                          t               }t        j                  | t        d             t        j                  j                         j!                         dk(  rt#        d      S t%        | d||d      S )	z
    function used to create restricted days.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return restricted days creation form template
    POST : return restricted days view template
    r  Nr|   z%Restricted day created successfully..r/  r.  z!leave/restrict/restrict_form.htmlr}   ra   )r   r   r6  r   r7  r@  r   r|   r   r   r
   r   r   RestrictLeaver   r   rv  r   r   )rW   query_stringr   r}   s       rB   restrict_creationrG    s     ;;((*Lu%SZ\ :;-D~~ .==?IIK$&DWa(O&PQ$$++-335:#$PQQ+]+ rI   c                    t         j                  j                         ddd   }| j                  j	                         }| j                  j                  d      }t        ||      }t               }t        | d||j                  |d      S )z
    function used to view restricted days.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return restricted days view  template
    Nr  r   z!leave/restrict/view_restrict.html)restrictdayr}   ra   )
rE  r   r`   r   r   r   r   RestrictLeaveFilterr   r}   )rW   r   r   r   r   restrictday_filters         rB   restrict_viewrL    s     $$((*4R40HKK))+M++//&)KX{3H,.+#&++	
 rI   c                    t         j                  j                         }| j                  j	                         }t        | j                  |      j                  }| j                  j                  d      rt        | |d      }| j                  j                  d      }t        |ddd   |      }t        |      }t        t         |       t        | d|||d      S )z
    function used to filter restricted days.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return restricted days view template
    r$   r   Nr  zleave/restrict/restrict.html)rI  ra   r   )rE  r   r`   r   r   rJ  r   r   r$   r   r   r!   r   )rW   r   r   rK  r   r   r   s          rB   restrict_filterrN  (  s     $$((*HKK))+M,W[[(CFF{{x #G-?J++//&)K/"5{CH'ImY/& iP rI   zleave.change_restrictleavec                    | j                   j                         }|j                  d      rt        |t	        d      d       }nt        |      }t
        j                  j                  |      }t        |      }| j                  dk(  rVt        | j                  |      }|j                         r/|j                          t        j                  | t        d             t!        | d|||d      S )	a  
    function used to update restricted days.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : restricted days id

    Returns:
    GET : return restricted days update form template
    POST : return restricted days view template
    r  Nr   r   r|   z%Restricted day updated successfully..z(leave/restrict/restrict_update_form.htmlr  )r   r   r6  r   r7  rE  r   r   r@  r   r|   r   r   r
   r   r   r   )rW   r   rF  r   rI  r}   s         rB   restrict_updaterP  D  s     ;;((*Lu%SZ\ :;-''++r+2Kk2D~~ D==?IIKWa(O&PQ2R}5 rI   zleave.delete_restrictleavec                    | j                   j                         }	 t        j                  j	                  |      j                          t        j                  | t        d             t        j                  j                         st        d      S t        d|       S # t        j                  $ r" t        j                  | t        d             Y kt        $ r" t        j                  | t        d             Y w xY w)z
    function used to delete restricted days.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : restricted days id

    Returns:
    GET : return restricted days view template
    r   z%Restricted day deleted successfully..zRestricted day not found.r  r.  /leave/restrict-filter?)r   r   rE  r   r   r   r
   r   r   r   r   r   r   r   r   )rW   r   rF  s      rB   restrict_deleterS  f  s     ;;((*L=!!R!(//1!$K"LM
   '')HII-l^<== %% @w"= >? =w": ;<=s   AB   2C>'C>=C>c                     | j                   j                         }| j                  dk(  r| j                  j	                  d      }	 t
        j                  j                  |      j                         }t        |      }t        j                  | t        d      j                  |             t#        d|       S # t        t        f$ r" t        j                   | t        d             Y > t        j                   | t        d             Y `xY w)z
    function used to delete multiple restricted days.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return restricted days view template
    r|   r  r   z-{} Leave restricted days deleted successfullyzRestricted Days not foundzSomething went wrongrR  )r   r   r   r|   r  rE  r   r   r   r7  r
   r   r   r   r   r   r   r   )rW   ra   restrict_day_idsrestrict_daysrv  s        rB   restrict_days_bulk_deleterW    s     
			 B~~"<<//6	?)1188' 9 fh  ()EABII%P -bT233	 z* 	DNN7A&A$BC	?NN7A&<$=>s   A'B; ;.D+ Dc                    | j                   j                  d      }|dk(  rt        j                  j	                         }D cg c]  }t        |j                         }}t        |      }||d}t        |      S c c}w )Nr   r`   rU  total_count)	r   r   rE  r   r`   strr   r7  r   )rW   r   rV  dayrU  rZ  r   s          rB   restrict_day_selectr]    ss     ++//&)Ke%--113/<=CFF==&'K#3KPG   >s   A<c                    | j                   j                  d      }| j                   j                  d      }|rt        j                  |      ni }|dk(  rwt	        |t
        j                  j                               }|j                  }|D cg c]  }t        |j                         }}|j                         }||d}t        |      S y c c}w )Nr   r   r`   r   rY  )r   r   r   r   rJ  rE  r   r`   r   r[  r   rv  r   )	rW   r   filteredfiltersrK  rI  restrictday_idsrZ  r   s	            rB   restrict_day_select_filterrc    s     ++//&)K{{x(H&.djj"BGe0m33779
 022BTU;3{~~.UU(..0'6{SG$$ 
 Vs   Cc                    ! t        | j                  j                               t        d      d }| j                  j
                  }t        j                  j                  |      }t        ||d      }| j                  dk(  rt        | j                  | j                  |      }t        j                  | j                  j                  d      d	      }t        j                  | j                  j                  d
      d	      }| j                  j                  d      }| j                  j                  d      }	t        j                  j                  ||      }
|
j                   |
j"                  z   }t%        ||||	      }t'        ||      }|D cg c]  } |j(                          }}t*        j                  j-                         }t/        |      }t0        j                  j-                         }t3        ||       |j4                  dk(  r@|j6                  dk(  r1t9        t;        | z               !t=        !fd|D              }||z
  }nOd}|j6                  dk(  r|D ]  }||v s|dz  } ||z
  }|j4                  dk(  rt=         fd|D              }||z
  }t>        j                  jA                  |||      jC                  ddg      }|jE                         r|jG                  dtI        d             nr|jJ                  r||k  rE|jM                         r"|jO                  d      }d}||_(        ||_)        |jP                  jT                  dk(  r|jR                  }|jP                  }t        j                  j                  ||      }
|jV                  |
j                   kD  rM|jV                  |
j                   z
  }|
j                   |_,        d|
_        |
j"                  |z
  |
_        ||_-        n/|
j                   |jV                  z
  |
_        |jV                  |_,        d|_.        |
jO                          |r||_/        |jO                          ta        |jb                        rta        |jb                        }g }|d   D ]  }|je                  |jf                          ti        jj                  tl              5  to        jp                  | j                  j
                  |d   ddd d!d"d#d$|jb                   %	       ddd       ts        | |d&'      }|ju                          tw        jx                  | tI        d(             ti        jj                  tl              5  to        jp                  | j                  j
                  |jR                  jz                  j|                  jf                  ddd d!d"d#t        d)      d*|jb                   z   %	       ddd       t        t>        j                  jA                  |+            dk(  s*| j                  j                  d,      j                  d-      rt        d.      S t        | d/||||d0      S |jG                  dtI        d1             t        j                  jA                  |      |j                  d2   _E        t        | d/||||d0      S c c}w # 1 sw Y   xY w# 1 sw Y   xY w)3a  
    function used to create user leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave type id

    Returns:
    GET : return user leave request creation form template
    POST : user my leave view template
    r  Nr   r   r   r  r|   r   rt  %Y-%m-%dru  start_date_breakdownend_date_breakdownyesc              3   &   K   | ]  }|v  
 y wr>   r?   r@   requested_datetotal_leavess     rB   rC   z%user_leave_request.<locals>.<genexpr>  s      $3A,.$   r   r/  c              3   &   K   | ]  }|v  
 y wr>   r?   r@   rm  company_leave_datess     rB   rC   z%user_leave_request.<locals>.<genexpr>  s      *& #&99*ro  )r   start_date__lteend_date__gteri  r  )
status__inz6There is already a leave request for this date range..Fr  Tr  r  r   r   r  r  r  r  r  r  r  r  rW   r#  r%  r+  r,  r   r	  zemployee-profile/r.  z'leave/user_leave/user_request_form.html)r}   r   r   ra   5You dont have enough leave days to make the request..r   )Fr   r   r   r7  r:  r;  r   r   r   UserLeaveRequestFormr   r|   r   r   strptimer=  r@  rB  r5   r9   r   r&   r`   r8   r%   r6   exclude_company_leaveexclude_holidayr   r   sumrM  r   r   r   	add_errorr   limit_leaver   r   r   r   r<  r?  rA  rC  rD  r>  r  r   r_   rE  rF  rG  rH  r;   rI  r:   rJ  r
   r   rK  rL  r   r   endswithr   r   r   r   )"rW   r   r   r   r   r}   rt  ru  rh  ri  r   available_total_leaver?  requested_datesr   holidaysholiday_datescompany_leavestotal_leave_countholiday_countrm  company_leave_countoverlapping_requestsrU  r   r   r   rV  rW  r   r  rX  rr  rn  s"                                   @@rB   user_leave_requestr    s    GKK1134SZ\BM||((H""&&"&-J (:FD ~~#GLL'--(S&&w||'7'7'EzR
$$W\\%5%5j%A:N&||//0FG$\\--.BC(0044 
 5 
 **_-N-NN 	 2"68J
 0
HE3BC49499;CC##'')*84&..2246~zR,,5**e3M4G$G HIL # $ET$ ! ,.??NM))U2&5 +N%6%*+ "0-!?//58&) **9* '# "02E!E+33:: (*  ;  

'k:6'
7 	  &&(NNaPQ ''>=R+R}} $			 7.8+,4) ..??4G"/";";K$1$?$?M&4&<&<&@&@&3 'A 'O %33o6T6TT)88-<<= 
 ,:: &= :;6+==E (9 DI@ ,::+::; (6
 *88 &= ,6M(#((*/7M,!&&(/0@0@A/G),,0, $&';J'G FG$OOG,D,DEF'00; "KK ' 9 9*21+%P(i(](`(^%4+B=CSCSBT)U
 #6Y#K  %%'$$Wa0V.WX#,,Y7 #LL55&3&?&?&R&R&g&g&x&x!L$e$Y$\$Z!0%,^%< $]%5%5$67&8 $,,333I%ll..~>GG+  ,H   9 ",'		 	 NNaOP -6,=,=,D,D,D,KDKK )1$		
	 	Q Dd " s    Z7AZ<)A4[	<[	[c                    | j                   j                         }t        j                  j	                  |      }	 | j
                  j                  |j                  k(  r|j                  dk7  rot        |j                  |      }| j                  dk(  r7t        | j                  | j                  ||j                        }|j                         r|j                  d      }|j                  }|j                   }|j"                  }|j$                  }|j&                  }	| j
                  j                  }
t(        j                  j	                  |
|	      }|j*                  |j,                  z   }t/        ||||      }t1        ||      }t2        j                  j5                         }t7        |      }t8        j                  j5                         }t;        ||      |	j<                  d	k(  r@|	j>                  d	k(  r1tA        tC        |z               tE        fd
|D              }||z
  }nOd}|	j>                  d	k(  r|D ]  }||v s|dz  } ||z
  }|	j<                  d	k(  rtE        fd|D              }||z
  }||k  r0|j                          tG        jH                  | tK        d             n|jM                  dtK        d             tO        | d|||d      S tG        jP                  | tK        d             tS        d      S # tT        $ r)}tG        jP                  | tK        d             Y d}~nd}~ww xY wtO        | d||d      S )a  
    function used to update user leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave request id

    Returns:
    GET : return user leave request update form template
    POST : return user leave request view template
    r   r   )r   r   r|   )r   r   Fr  re  rj  c              3   &   K   | ]  }|v  
 y wr>   r?   rl  s     rB   rC   z&user_request_update.<locals>.<genexpr>  s      0 . +l:0ro  r   r/  c              3   &   K   | ]  }|v  
 y wr>   r?   rq  s     rB   rC   z&user_request_update.<locals>.<genexpr>  s      6$2 !/2E E6ro  z$Leave request updated successfully..Nrw  z)leave/user_leave/user_request_update.htmlr  z&You can't update this leave request...r.  User has no leave request..)+r   r   rM  r   r   r:  r;  r   rD  rx  r   r|   r   r   r   rt  ru  rh  ri  r   r=  r@  rB  r5   r9   r&   r`   r8   r%   r6   rz  r{  r   r   r|  r
   r   r   r}  r   r   r   rH  )rW   r   r   rU  r}   rt  ru  rh  ri  r   r   r   r  r?  r  r  r  r  r  r  rm  r  r   rr  rn  s                          @@rB   user_request_updater  w  sO    KK))+M ((,,,3MWBLL%%)B)BB$$
2'&22]D ~~'+LLMM**66	 ==?$(IIUI$;M!.!9!9J,55H+8+M+M()6)I)I&!.!<!<J&||88H&4&<&<&@&@$,J 'A 'O (66);;< * &>"H.BDV&N '<J&QO'//335H$6x$@M%2%:%:%>%>%@N*B&
+' #88EA&66%?'+C@S0S,T'U,/ 02A0 -) *8:K)K()%55>2A 7#1]#B$1Q$6M7 .<m-KN%;;uD25 66E6 3/ .<>Q-QN%)>>%**, ((#Q'M%N  UV ; '  NN7A&N$OP LMM Bw"? @AAB3	
 s%   HL BL !)L 	L=L88L=c                 x   | j                   j                         }	 t        j                  j	                  |      }| j
                  j                  |j                  k(  r/t        j                  | t        d             |j                          t        j                  j                  | j
                  j                        st!        d      S t#        d|       S # t        j                  $ r" t        j                  | t        d             Y t        $ r" t        j                  | t        d             Y w xY w)z
    function used to delete user leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave request id

    Returns:
    GET : return user leave request view template
    r   r  r  r  rv  r.  z/leave/user-request-filter?)r   r   rM  r   r   r:  r;  r   r
   r   r   r   r   r   r   r   r   r   )rW   r   r   rU  s       rB   user_request_deleter    s     KK))+M=$,,00B07<<$$(A(AAWa(N&OP  "
 &&7<<3L3L&MHII5m_EFF $$ Bw"? @A =w": ;<=s   A2C 2D9'D98D9c                    	 | j                   j                  }|j                  j                         }| j                  j                         }| j                  j                  d      }t        ||      }t               }|j                         sd}nd}t        | |||j                  |d      S # t        $ r- t        j                  | t        d             t!        d      cY S w xY w)z
    function used to view user assigned leave types.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return user assigned leave types view template
    r   z+leave/user_leave/user_leave_empty_view.htmlz%leave/user_leave/user_leave_view.html)user_leavesr}   ra   User is not an employee..r
  )r:  r;  r   r`   r   r   r   r   r  r   r   r}   rH  r
   r   r   r   )rW   r   r   r   r   r   r  r   s           rB   user_leave_viewr  	  s    <<,,++//1--/kkoof- ;7 3 5 IMCM'-22#
 	
  w"= >?}s   B*B- -3C#"C#c                    	 | j                   j                  }|j                  j                         }| j                  j                         }| j                  j                  d      }t        | j                  |      j                  }t        |      }t        t        |       t        ||      }t        | d|||d      S # t        $ r4}t        j                   | t#        d             t%        d      cY d}~S d}~ww xY w)z
    function used to filter user assigned leave types.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return user assigned leave types view template
    r   z leave/user_leave/user_leave.html)r  ra   r   r  r
  N)r:  r;  r   r`   r   r   r   r  r   r   r!   r=  r   r   rH  r
   r   r   r   )	rW   r   r   r   r   r  r   r   r   s	            rB   user_leave_filterr  +	  s    <<,,++//1--/kkoof- 3GKK J M M]+	.)4 !6D.$M)T
 	

  w"= >?}s   B<B? ?	C<)C71C<7C<c                    	 | j                   j                  }|j                  j                         }| j                  j                         }| j                  j                  d      }|}g }t        j                  d      re|D ]`  }t        dd      }|j                  j                  |j                  |j                  |j                  g      }	|	sP|j                  |       b t!        | j                  |      }
t#        |
j$                  j'                  d      |      }t)        j*                  t-        |j.                  j1                  dd	
                  }t2        j                  j                  |j4                        j7                  d	      }t8        j                  j;                         rRt8        j                  j;                         j<                  r*t2        j                  j                  |j4                        }t?        j@                         }tC        | d||
jD                  ||tF        jH                  |||d      S # tJ        $ r4}tM        jN                  | tQ        d             tS        d      cY d}~S d}~ww xY w)z
    function used to view user leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return user leave request view template
    r   ra  rb  rc  rf  r_  r^  r   Tr   rv  $leave_type_id__is_compensatory_leavez'leave/user_leave/user_request_view.html)rY  r}   ra   rn  rm  r  r  ro  r  r
  N)*r:  r;  leaverequest_setr`   r   r   r   r	   rs  r1   r   r   r   rt  ru  r_   UserLeaveRequestFilterr   r   r  r   r   r   rw  r   r=  r   r   r   r   r   r   ry  r   r}   MyLeaveRequestReGroupr   rH  r
   r   r   r   )rW   r:  r   r   r   rY  ro  rU  r  r  user_request_filterr   r  
user_leavern  r   s                   rB   user_request_viewr  J	  s-   ;||((((,,.--/kkoof- "(*%]+!/ H %<+3F%! /66== - 9 9%00%..+ > 
 188G!H$ 5W[[8T !4!7!7!@!@!GUjj%%11$T1BC
 $++22tww2GOO15 P 

  ''--/#++113FF'//664776KJzz|5"*+00# ,299*)1N	
 	
  w"= >?}s%   CI E3I 	J)I>8J>Jc           	         	 | j                   j                  }|j                  j                         j	                  d      }| j
                  j                         }| j
                  j                  d      }| j
                  j                  d      }|}g }t        j                  d      re|D ]`  }t        dd      }	|	j                  j                  |j                  |j                  |j                  g      }
|
sP|j!                  |       b t#        | |d      }t%        | j
                  |      j&                  }d	}|d
k7  r|t)        ||| j
                  j                  d      d      }|D cg c]  }|d   	 }}g }|D ].  }|j*                  D ]  }|j!                  |j,                          0 t/        j0                  t3        |            }d}n\t5        || j
                  j                  d            }t/        j0                  |j*                  D cg c]  }|j,                   c}      }t7        |      }t9        t:        |       d|v r|d   }t=        |      dkD  r	|d   g|d<   t>        j                  j                  |j,                        }||||tA        jB                         |||d}tE        | ||      S c c}w c c}w # tF        $ r4}tI        jJ                  | tM        d             tO        d      cY d}~S d}~ww xY w)z
    function used to filter user leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return user leave request view template
    r^  r   r   ra  rb  rc  rf  r$   )z#leave/user_leave/user_requests.htmlr  Nr   zleave/user_leave/group_by.htmlrD  r/  r  rv  )rY  ra   r   r   rn  r  r  ro  r  r  r
  )(r:  r;  r  r`   r  r   r   r   r	   rs  r1   r   r   r   rt  ru  r_   r$   r  r   r/   rw  r   r   r   r   r   r   r!   rM  r7  r=  r   ry  r   rH  r
   r   r   r   )rW   r:  r   r   r   r   rY  ro  rU  r  r  r  r  r  r  r  rt   r   r   r   r  r  r   r   s                           rB   r  r  	  s   N||((((,,.77>--/kkoof-( "(*%]+!/ H %<+3F%! /66== - 9 9%00%..+ > 
 188G!H$ '8X64W[[(KNN;B;5,"3#UGKKOOF,CV# 7JJU5=JKJG$ 0 % 1 1 0HNN8;;/00  ::d7m4L7H #0#W[[__V%<#  ::-@-L-LMML ]+	,	2y #H-K;!#'22&7	(##++22tww2G
 2$ JJL'%-J	
 gx99I K N.  w"= >?}sE   C9K
 <A4K
 0K <BK
 K)BK
  
K
 
	L)L<LLc           	      j   t         j                  j                  |      }	 | j                  j                  d      }|r$t	        j
                  |      }t        ||      \  }}t        | d||d      S # t        $ r4}t        j                  | t        d             t        d      cY d}~S d}~ww xY w)z
    function used to view one user leave request.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return one user leave request view template
    r   r   z&leave/user_leave/user_request_one.html)rU  r   r   r   r  r
  N)rM  r   r   r   r   r   r   r   rH  r
   r   r   r   )rW   r   rU  r   r   r   r   r   s           rB   user_request_oner  	  s     !((,,,3M#KKOOO<::&78L#2<#D K4!.!2'		
 		
  w"? @A}s   AA5 5	B2>)B-'B2-B2c                     t         j                  d      }t        |j                  dd            }t	        j
                         }t        | d|||d      S )z
    function used to view employees are leave today.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Json response of employee
    r   rh  r   Tr   zleave/on_leave.html)leavesr   today_holidays)rM  employees_on_leave_todayr   r   r&   r  r   )rW   r  r   r  s       rB   employee_leaver  
  s`     22*2EF**4d*;<L,,.N(,	
 rI   c                 L   g }g }t         j                  j                         }t        | j                        j
                  }|D ]Q  }|j                  |      j                         }|s&|j                  |j                         |j                  |       S t        ||d      S )z
    function used to view overall leave in the company.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Json response of labels, data
    .employee_id__employee_work_info__department_id)labelsdata)
Departmentr   r`   rp  r   r   r   rv  r_   r=  r   )rW   r  r  departmentsrY  r=  rv  s          rB   overall_leaver  +
  s     FD$$((*K'477N! 
%%;E & 

%' 	 MM*//0KK 64899rI   c                    t        j                         }t        j                  j	                  |d      }t        j                  j	                  d|j
                        }t        j                  j	                  d|j
                        }t        j                  j	                  |      }|r|j                  d      j                         nd}||||d	||j                  d
      j                  d      t        |j                  |j
                  t        j                  |j                  |j
                        d
         j                  d      d}t        | d|      S )z
    function used to view Admin dashboard in the leave module.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Admin dasboard template.
    r   )start_date__gterD  r   )rD  start_date__monthr  r  rt  Nr  r/  )r\  rg  )r   r   r  next_holidayr  ry  	first_daylast_dayzleave/dashboard.html)r   ry  rM  r   r   monthr&   r  r   replacestrftimeyearcalendar
monthranger   )rW   ry  r   r   r  r  r  r   s           rB   r  r  E
  s.    JJLE$$++E++VI##**U[[ + H ##**U[[ + H &&u&=H>F8$$\288:DL $ ]]q])22:>JJX%8%8U[[%QRS%T

(:
G '17;;rI   c                    t        j                         }t        j                  j	                  | j
                        }t        j                  j                  |      }|j                  d      }|j                  d      }|j                  d      }t        j                  j                  |      }|j                         r|j                  d      j                         nd	}|||||d
d}	t        | d|	      S )z
    function used to view Employee dashboard in the leave module.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Employee dasboard template.
    rE  rv  r   rh  r   r  r  rt  Nr  )rY  r   r   r  r  r  zleave/employee_dashboard.html)r   ry  r(   r   r   r:  rM  r   r&   r   r  r   r   )
rW   ry  r:  rY  r   r   r  r  r  r   s
             rB   employee_dashboardr  k
  s     JJLE>D!))00T0BN%%[%9I$$J$7H$$J$7H&&u&=H3;??3D,'--/$ 
 )$ G ':GDDrI   c                     g }t        j                         }| j                  j                  d      }| j                  j
                  }t        j                  j                  |      }|r>t        j                  |d      }|j                  |j                  |j                        }n'|j                  |j                  |j                        }|D  cg c]  } | j                   }} |d|d}t         d|      S c c} w )z
    function used to view leave request table.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave requests table.
    r   rv  %Y-%mr  start_date__yearr  )rY  r  r   z1leave/leave_request/dashboard_leave_requests.html)r   ry  r   r   r:  r;  rM  r   r   r   ry  r  r  r   r   )rW   r   ry  r\  r   rY  r   s          rB   dashboard_leave_requestr  
  s     LJJLE
++//&
!C||((H!))00X0FN
W-'..!ii#(( / 
 (..#kkEJJ / 
 /==7GJJ=L=( $G
 'NPWXX >s   C;c                    t         j                  j                  | j                        }t        j                  j                  |      j                  d      }g }g }|D ]O  }|j                  |j                  |j                  z          |j                  |j                  j                         Q t        d      |dg}||t        d      d}t        |      S )	z
    function used to generate available leave chart in employee dashboard.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Json response of labels, dataset, message.
    r  rv  r   )r@  zTotal leaves availablelabelr  z0Oops!! No leaves available for you this month...r  datasetr  )r(   r   r   r:  r=  r   r   r_   r@  rB  r   r]   r   r   )rW   r:  rS  leave_countr  rV  r  rY   s           rB   available_leave_chartr  
  s     >D%--444FNN O  KF! 05//%2I2IIJe))../0 /0	
G GHH
 !!rI   c           	         t        j                         }| j                  j                  d      r1| j                  j                  d      }t	        j
                  |d      }t        j                  j                  dd      }|j                  |j                  |j                        }|j                  dd      }g }g }|j                  |j                  |j                        D ]  }|j                  |j                          t        t        |            D ]  }|j                  |g d	        t        t        |            }t!        d
       }|D ]i  }	|j                  |	|j                  |j                        }
|
D ]:  }||j"                  j$                     |	xx   t'        |j(                  d      z  cc<   < k |D ]   }|d   }|D 	cg c]
  }	||   |	    c}	|d<   " g }t        t        |            D ],  }|j                  |j*                   d|j,                          . ||t/        d      d}t1        |      S c c}	w )z
    function used to generate employee leave chart in Admin dashboard.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Json response of labels, dataset, message.
    r   r  Tr   )employee_id__is_activerD  r  leave_type_id__namer   r  c                       t        t              S r>   )r   floatr?   rI   rB   rH   z&employee_leave_chart.<locals>.<lambda>
  s    E0B rI   )r   r  r     r  r  r#  zNo leave request this monthr  )r   ry  r   r   r   ry  rM  r   r   r  r  r   r_   r   r   r   r   r   r]   roundr?  employee_first_nameemployee_last_namer   r   )rW   r\  rY  r   r  r  r   r   total_leave_with_typer  r  rV  r  dataset_labelemployee_labelrY   s                   rB   employee_leave_chartr  
  s^    **,C{{vkkoof%W-!))00#J 1 N $**))chh + N !,,-B,NKFG"))))chh *  , 	h**+,
 3{+, 

#	

 #f+F'(BC &&SXX ' 
  	E!%"5"5":":;EBe$$aG B		  YWQWX-m<UCXVY NV% 
++,Ah.I.I-JK	


 !23H
 !! Ys   Ic                    t        j                         }| j                  j                  d      r1| j                  j                  d      }t	        j
                  |d      }t        j                  j                         }|D ci c]  }|j                  d }}t        j                  j                  d      }|j                  |j                  |j                        }g }g }|D ]  }|j                         D ]"  }	|j                  |	j!                  d             $ |D ]G  }||j"                  j$                  j&                  k(  s'||j                  xx   |j(                  z  cc<   I  |j+                         D ]  \  }
}|dk7  s|j                  |
        t-        |j/                               }|D cg c]
  }|dk7  s	| }}t1        d      |d	g}||t1        d
      d}t3        |      S c c}w c c}w )z
    function used to generate department leave chart in Admin dashboard.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Json response of labels, dataset.
    r   r  r   r   rh  r  rg  r  r  z!No leave requests for this month.r  )r   ry  r   r   r   ry  r  r   r`   r=  rM  r   r  r  r  r_   r  r   rK  r>  r?  r^   r   valuesr   r   )rW   r\  r  depdepartment_countsrU  leave_datesr  rV  
leave_dater=  rv  r  rt   r  rY   s                   rB   department_leave_chartr    s    **,C{{vkkoof%W-$$((*K6ABs*BB ((//z/BM!(())chh ) M KF J//1 	@Jz22:>?	@  	JCe''::HHH!#..1U5I5II1	J	J /446 &
EA:MM*%& #**,-F!'65A:e6F6 rU	
G 89H
 !!? C& 7s   G28
G7G7c                 J   t        j                         }| j                  j                  d      r1| j                  j                  d      }t	        j
                  |d      }t        j                  j                         }|D ci c]  }|j                  d }}t        j                  j                  d      }|j                  |j                  |j                        }|D ]:  }|D ]3  }||j                  k(  s||j                  xx   |j                  z  cc<   5 < g }|j!                         D ]  \  }	}
|
dk7  s|j#                  |	        t%        |j'                               }|D cg c]
  }|dk7  s	| }}|d|igt)        d      d	}t+        |      S c c}w c c}w )
z
    function used to generate leave type chart in Admin dashboard.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Json response of labels, dataset.
    r   r  r   r   rh  r  r  z0No leave requests for any leave type this month.r  )r   ry  r   r   r   ry  r   r   r`   r]   rM  r   r  r  r   r?  r^   r_   r   r  r   r   )rW   r\  r   typesleave_type_countrU  rV  levr  r   rv  r  rt   rY   s                 rB   leave_type_chartr  M  s    **,C{{vkkoof%W-##'')K3>?%

A?? ((//z/BM!(())chh ) M  C 	CCe))) *e.B.BB*	CC F-335 &
EA:MM*%& "))+,F!'65A:e6F6  

 GHH !!7 @  7s   F-
F 8F c                    t        j                         }|t        |j                               z
  }t	        d      D cg c]  }|t        |      z    }}g }t
        j                  j                  d      }g }|D ](  }|j                         D ]  }	|j                  |	        * |D 
cg c]6  }
|
j                  |j                  k(  r|
j                  |j                  k(  r|
8 }}
|D ]<  }g }|D ]  }||k(  s	|j                  |        |j                  t        |             > t        d      |df}|D cg c]  }|j                  d       }}||d}t        |      S c c}w c c}
w c c}w )	z
    function used to generate leave over a week chart in Admin dashboard.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return Json response of labels, dataset.
    days   r   rh  zLeave Trendsr  z%d-%m-%Y)r  r  )r   ry  r   weekdayrangerM  r   r   r  r_   r  r  r7  r   r  r   )rW   ry  start_of_weeki
week_datesleave_in_weekrU  r  rV  r  r\  filtered_dates	week_dater  filtered_dater  r  rY   s                     rB   leave_over_periodr  |  s    JJLEI5==?;;M=B1XF-)"33FJFM ((//z/BMK +//1 	+Jz*	++ 99#EJJ(> 	N 
   (	+ 	+M	)M*	+ 	SY'( ~&!	
G ?IIi  ,IFI H !!G G& Js   E',;E,=E1c                 H	   t        | j                  j                               t        d      d }| j                  j
                  }|j                  }t        |      }| j                  dk(  rt        | j                  | j                  |      }t        |j                  d         t        |      k(  rq|j                         rP|j                  d      }d}|j                  j                   d	k(  r|j"                  }|j                  }t$        j&                  j)                  ||
      }	|j*                  |	j,                  kD  rM|j*                  |	j,                  z
  }
|	j,                  |_        d|	_        |	j0                  |
z
  |	_        |
|_        n/|	j,                  |j*                  z
  |	_        |j*                  |_        d|_        |	j                          |r;| j                  j
                  |_        |j                          t9        |j                        rt9        |j                        }g }|d   D ]  }|j;                  |j<                          t?        j@                  tB              5  tE        jF                  | j                  j
                  |d   ddddddd|j                   	       ddd       tI        jJ                  | tM        d             t?        j@                  tB              5  tE        jF                  | j                  j
                  |j"                  jN                  jP                  j<                  d|j"                   dd|j"                   dd|j"                   dd|j"                   dd|j"                   ddtS        d      d|j                   z   	       ddd       tU        | |d !      }|jW                          t        |      }t        tX        j&                  j[                  |"            d#k(  rt]        d$      S t_        | d%||d&      S tI        j`                  | tM        d'             t_        | d%d(|i      }t]        |jb                  je                  d)      d*z         S t_        | d%||d&      S # 1 sw Y   xY w# 1 sw Y   xY w)+z
    function used to create leave request from calendar.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave request form template
    POST : return leave request view
    r  Nrf  r|   r   Fr  Tr  r  r   r   r   r  r  r  r  r  r  r  r  r%  r&  r'  r(  u   Neuer Urlaubsantrag für z
 erstellt.r)  r*  r+  r,  rW   r#  rv  r/  r.  z"leave/user_leave/request_form.htmlrD  You don't have permissionr}   r  r  )3r   r   r   r7  r:  r;  r   UserLeaveRequestCreationFormr   r|   r   r  r  r   r   r   r<  r   r=  r   r   r?  r@  rA  rB  rC  rD  r>  r  r_   rE  rF  rG  rH  r;   rI  r
   r   r   rK  rL  r   r:   rJ  rM  r   r   r   r   r  r  )rW   r   r.  rO  r}   rU  r   r   r   r   rV  rW  r   r  rX  rY   s                   rB   leave_request_creater    sh    GKK1134SZ\BM
,,
#
#CVVF'5D~~+GLL'--RUVtyy'(CK7}} $			 7 ..??4G"/";";K$1$?$?M&4&<&<&@&@&3 'A 'O %33o6T6TT)88-<<= 
 ,:: &= :;6+==E (9 DI@ ,::+::; (6
 *88 &= ,6M(#((*/6||/H/HM,!&&(/0@0@A/G),,0, $&';J'G FG$OOG,D,DEF'00; "KK ' 9 9*21+%P(i(](`(^%4+B=CSCSBT)U
 $$Wa0V.WX#,,Y7 #LL55&3&?&?&R&R&g&g&x&x#A-B[B[A\\]!^&VWdWpWpVqqr$s&?@Y@Y?ZZd$e&MmNgNgMhhi$j&N}OhOhNiij$k!0%,^%< $]%5%5$67&8 #6Y#K  %%'7ED<//6666JKqP+H   4 '  NN7A&A$BC=~H    ''03XX  ,	
 k  s   0AR3B:RRR!c           	         | j                   j                  }t        j                  j	                         j                  d      }t        | j                  |      j                  }t        | |d      }| j                  j                  d      }t        ||      }t        j                  t        |j                  j!                  dd                  }t        j                  j#                  |j$                        j                  d      }t        | j                  |      j                  }| j                  j                  d      }t        ||      }t        j                  t        |j                  j!                  dd                  }t               }	| j                  j'                         }
t)        |
      }t+        t        |      }|||
|	j,                  |t.        j0                  ||d	}t3        | d
|      S )z
    function used to view leave allocation request.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave allocation request view template
    r^  !leave.view_leaveallocationrequestr   r   Tr   rv  m_page)leave_allocation_requestsmy_leave_allocation_requestsra   r}   r   rm  r   my_requests_idszAleave/leave_allocation_request/leave_allocation_request_view.htmlr  )r:  r;  LeaveAllocationRequestr   r`   r  LeaveAllocationRequestFilterr   r   r    r   r   r   r   r   rw  r   r   r   r   r   r!   r}   LeaveAllocationRequestReGroupr   r   )rW   r   r   r   r  r   r  my_page_numberr  leave_allocation_request_filterr   r   r   s                rB   leave_allocation_request_viewr  /  s    ||((H%--113<<UCH+GKKBEEH!>H ++//&)K -h D::&22>>t$>OPL $:#A#A#H#HKK $I $huo ! $@1$b ! [[__X.N#0$n$  jj)55AA$TARSO 'C&D#KK))+M'I!"8)DI%>(D/44 299$*	G K rI   c                 R   d}| j                   j                  d      dk(  rd}| j                   j                  d      }|r$t        j                  |      }t	        ||      \  }}t
        j                  |      }|||| j                   j                  d      d}t        | d|	      S )
z
    function used to present the leave allocation request detailed view.

    Parameters:
    request (HttpRequest): The HTTP request object.
    req_id : leave allocation request id

    Returns:
    return leave allocation request single view
    F
my_requestTrueTr   r  )leave_allocation_requestr  r   r   r   r  zHleave/leave_allocation_request/leave_allocation_request_single_view.htmlr  )r   r   r   r   r   r  r   r   )	rW   req_idr  r   r   r   r   r  r   s	            rB   $leave_allocation_request_single_viewr  g  s     J{{|$.
8zz"34.|VDW5::6B$< *[[__[1G R rI   c                    | j                   j                  }t        d|i      }t        | |d      }|j                  d   j
                  t        j                  j                  | j                         z  |j                  d   _        | j                  dk(  rt        | j                  | j                        }|j                         rY|j                  d      }d|_        |j                          t        j                   | t#        d             t%        j&                  t(              5  t+        j,                  | j                   j                  |j.                  j0                  j2                  j4                  d	|j.                   d
d|j.                   d
d|j.                   d
d|j.                   d
d|j.                   d
dt7        d      d|j8                   z   	       ddd       t;        | dd|i      }t=        |j>                  jA                  d      dz         S d|i}t;        | d|      S # 1 sw Y   QxY w)z
    function used to create leave allocation request.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return leave allocation request form template
    POST : return leave allocation request view
    r   r   leave.add_leaveallocationrequestr  r|   Fr  z'New Leave allocation request is createdz)New leave allocation request created for r'  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 people-cicleleave-allocation-request-viewr,  r  NzCleave/leave_allocation_request/leave_allocation_request_create.htmlr}   r  $<script>location. reload();</script>r  )!r:  r;  LeaveAllocationRequestFormr   r   r   r(   r   r   r   r|   r   r   r   skip_historyr
   r   r   rF  rG  rH  r;   rI  r   rK  rL  rE  r   r   r   r   r  r  )rW   r   r}   r  rY   r   s         rB   leave_allocation_request_creater    s)    ||((H%}h.GHDgt-OPD*.+++h!!((',,(G+HDKK' ~~)',,F==?'+yyy'>$49$1$))+Wa(Q&RS$$Y/ LL--6BBUUjj{{DE]EiEiDjjklYZrZ~Z~Y  @A  BNOgOsOsNttuvUVnVzVzU{{|}STlTxTxSyyz{'$%DE5889:; UH
    ''089  tnGM / s   *B:H44H=c                    | j                   j                  d      }| j                  j                  }| j                   j                  d      }| j                   j                  d      }| j                   j	                         }d}t        | j                         j                  j                  d      }t        j                  j                  |j                        j                  d      }t        | j                   |      j                  }t        | |d      }| j                   j                  d      rt        | |d      }|rt        |||d      }	t        |||d      }
|	D cg c]  }|d	   	 }}|D cg c]  }|j                  D ]  }|j                   ! }}}t!        j"                  t%        |            }|
D cg c]  }|d	   	 }}|D cg c]  }|j                  D ]  }|j                   ! }}}t!        j"                  t%        |            }d
}nt'        ||      }	t'        ||      }
t!        j"                  t%        |	j                  j)                  dd                  }t!        j"                  t%        |
j                  j)                  dd                  }t+        |      }t-        t        |      }|j/                  dd        |	|
|||||d}t1        | ||      S c c}w c c}}w c c}w c c}}w )Nr   r   r  zAleave/leave_allocation_request/leave_allocation_request_list.htmlr^  rv  r  r$   r   Eleave/leave_allocation_request/leave_allocation_request_group_by.htmlr   Tr   )r  r  ra   r   r   r   r  r  )r   r   r:  r;  r   r  r   r  r  r   r   r   r    r$   r/   rw  r   r   r   r   r   r   r!   r9  r   )rW   r   r   r   r   r   r  "leave_allocation_requests_filtered%my_leave_allocation_requests_filteredr  r  r  r  rt   r   r  r   r  r   r   s                       rB   r  r    s    KKOOG$E||((H++//&)K[[__X.NKK))+MRH *F*b% ' -C,J,J,Q,QKK -R -huo * -I:-b * *<35X*&
 {{x -37.
*
 $5.{F%
! (915.((
$
 3LLuV}LL%0
!ARAR
5=HKK

 
 zz$w-02NOuV}OO%0
!ARAR
5=HKK

 
 **T']3S 	 %2.%
! (51>(
$ zz*66BB4dBST
 **-99EEdQUEVW

 'I!"8)DIMM(D! &?(D $*G '8W55U M

 P
s   "K(5$K->K3$K8c                    t         j                  j                  |      }t        |      }t	        | |d      }|j
                  d   j                  t        j                  j                  | j                        z  |j
                  d   _        |j                  dk7  r| j                  dk(  rt        | j                  | j                  |      }|j                         rZ|j                  d	      }d|_        |j                          t#        j$                  | t'        d
             t)        j*                  t,              5  t/        j0                  | j                  j2                  |j4                  j6                  j8                  j:                  d|j4                   dd|j4                   dd|j4                   dd|j4                   dd|j4                   ddt=        d      d|j>                   z   	       ddd       tA        | d||d      }tC        |jD                  jG                  d      dz         S tA        | d||d      S t#        jH                  | t'        d             tC        d      S # 1 sw Y   zxY w)a!  
    function used to update leave allocation request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    req_id : leave allocation request id

    Returns:
    GET : return leave allocation request update template
    POST : return leave allocation request view
    r   r   r
  r   r  r   r|   Fr  z1Leave allocation request is updated successfully.z%Leave allocation request updated for r'  u6   تم تحديث طلب تخصيص الإجازة لـ u/   Urlaubszuteilungsanforderung aktualisiert für u6   Solicitud de asignación de licencia actualizada para u1   Demande d'allocation de congé mise à jour pour r  r  r,  r  NzCleave/leave_allocation_request/leave_allocation_request_update.htmlr}   r  r  r  z You can't update this request...r.  )%r  r   r   r  r   r   r   r(   r   r:  rD  r   r|   r   r   r   r  r
   r   r   rF  rG  rH  r;   rI  r;  r   rK  rL  rE  r   r   r   r   r  r  r   )rW   r  r  r}   rY   s        rB   leave_allocation_request_updater    si     6==AAVAL%/GHDgt-OPD*.+++h!!((',,(G+HDKK'  &&*4>>V#-gmm6ND }}+/99E9+B(8=(5(--/  QRS  ((3 KK11":"F"F"Y"Y"n"n""DE]EiEiDjjkl"XYqY}Y}X~~  !A"QRjRvRvQwwx y"XYqY}Y}X~~  !A"STlTxTxSyyz {+!()H!I !9!<!< =>"? "Y!V4
 $$$++G4<=  QV,
 	
 	w"D EFHII; s   B:I77J c                     t         j                  j                  |      }|j                  dk(  r|j                  }|j
                  j                         j                  |j                        j                         rC|j
                  j                         j                  |j                        j                         }nt        |j                  |      }|xj                  |j                  z  c_        |j                          d|_        |j                          t        j                   | t#        d             t%        j&                  t(              5  t+        j,                  | j.                  j0                  |j                  j2                  ddd	d
ddt5        d      d|j6                   z   	       ddd       nt        j8                  | t#        d             t;        | j<                  j                  dd            S # 1 sw Y   .xY w)a  
    function used to approve a leave allocation request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    req_id : leave allocation request id

    Returns:
    GET :It returns to the default leave allocation request view template.
    r   r   )r   r  r   z.Leave allocation request approved successfullyz/Your leave allocation request has been approvedu=   تمت الموافقة على طلب تخصيص إجازتكz/Ihr Antrag auf Urlaubszuweisung wurde genehmigtu8   Se ha aprobado su solicitud de asignación de vacacionesu7   Votre demande d'allocation de congé a été approuvéer  r  r,  r  Nz.The leave allocation request can't be approvedr	  r
  )r  r   r   rD  r   r   r`   r   r   r   r   r=  r@  r?  r   r
   r   r   rF  rG  rH  r;   rI  r:  r;  rE  r   r   r   r  r   )rW   r  r  r   r   s        rB    leave_allocation_request_approver  Y  s     6==AAVAL&&+5+77$$((*V":"H"HVIVX
 ((,,.&>&L&LM  -6DD$O 	&&*B*Q*QQ&*4 ' %%'!$T"UV  + 	KK))2>>OOFWIRQ$ !@A144567	 	 	w"R ST 0 0 EFF	 	s   A HHc                 h   t         j                  j                  |      }|j                  dk(  s|j                  dk(  rt	               }| j
                  dk(  rt	        | j                        }|j                         rd|j                  d   |_	        |j                  dk(  r|j                  }|j                  }t        j                  j                  ||j                        j                         }t!        d|j"                  |z
        |_        |j%                          d|_        |j%                          t'        j(                  | t+        d	             t-        j.                  t0              5  t3        j4                  | j6                  j8                  |j                  j:                  d
dddddt=        d      d|j>                   z   	       ddd       tA        d      S tC        | d||d      S t'        jD                  | t+        d             tA        d      S # 1 sw Y   tA        d      S xY w)a   
    function used to Reject leave allocation request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave allocation request id

    Returns:
    GET : It returns to the default leave allocation request view template.

    r   r   r   r|   r  r  r   r  z.Leave allocation request rejected successfullyz/Your leave allocation request has been rejectedu*   تم رفض طلب تخصيص إجازتكz/Ihr Antrag auf Urlaubszuweisung wurde abgelehntu9   Se ha rechazado su solicitud de asignación de vacacionesu5   Votre demande d'allocation de congé a été rejetéer  r  r,  r  Nr  zHleave/leave_allocation_request/leave_allocation_request_reject_form.htmlr  .The leave allocation request can't be rejected)#r  r   r   rD   LeaveAllocationRequestRejectFormr   r|   r   r  r  r   r?  r=  r   r   r   r  r@  r   r
   r   r   rF  rG  rH  r;   rI  r:  r;  rE  r   r   r   r   r   )rW   r  r  r}   r   r?  r   s          rB   leave_allocation_request_rejectr    s     6==AAVAL '';6#**j8/1>>V#3GLLAD}}9=9J9J89T(6+22j@!9!G!GJ%=%L%LN&4&<&<&C&C&0$<$H$H 'D ' eg $ 69?99NJ6O2 $((*2<(/(--/  QOP  ((3 KK11":"F"F"W"WN L Q [ W,!()H!I !9!<!< =>"? $$IJJVV,
 	
 	w"R STABB+ $$IJJs   1A HH1c                 <   	 t         j                  j                  |      }|j                  dk7  r0|j	                          t        j                  | t        d             nt        j                  | t        d             | j                  j                  d      }| j                  j                         }|rL|dk(  rGt         j                  j                         }|j!                         rt#        d	|       S t%        d
      S |r}|dk(  rx| j                  j                  d      }t'        j(                  |      }||v r|j+                  |       t-        t'        j(                  |      |      \  }}	t#        d|	 d|       S t#        t.              S # t         j                  $ r# t        j                  | t        d             Y Ft        $ r# t        j                  | t        d             Y pt        $ r# t        j                  | t        d             Y w xY w)z
    function used to delete leave allocation request.

    Parameters:
    request (HttpRequest): The HTTP request object.
    id : leave allocation request id

    Returns:
    GET : return leave allocation request view template
    r   r   z/Leave allocation request deleted successfully..z"Approved request can't be deleted.z#Leave allocation request not found.zRelated entries existr   zview-containerz'/leave/leave-allocation-request-filter?r  objectDetailsModalW25Targetr   z,/leave/leave-allocation-request-single-view/?)r  r   r   rD  r   r
   r   r   r   r   r   r   r   r   r   r`   r   r   r   r   r   r   r   r  )
rW   r  r  r4  r   leave_allocationsr   r   r   r   s
             rB   leave_allocation_request_deleter"    s   <#9#A#A#E#E#E#P #**j8$++-LM NN7A&J$KL   !12IKK))+MY"222::>>@##%Em_UVV EFF	y$AA8M2^#!!&)+:JJ}%v,
(= :=/=/Z
 	
 1227 ".. Jw"G HI Jw"G HI <w"9 :;<s   A>F 2H'H0'HHc                    | j                   j                  d      }|dk(  rd| j                  j                  d      rt        j
                  j                         }n*t        j
                  j                  | j                        }D cg c]  }t        |j                         }}|j                         }||d}t        |d      S c c}w )Nr   r`   r  Gemployee_id__employee_work_info__reporting_manager_id__employee_user_idr  rZ  Fsafe)r   r   r:  r  r=  r   r`   r   r[  r   rv  r   rW   r   r  r.  r  rZ  r   s          rB   assigned_leave_selectr*    s    ++//&)Ke<<  !<=&..224I&..55X_XdXd 6 I ,55CCK5L5//#K+KHGe,, 6   	C	c                 F   | j                   j                  d      }| j                   j                  d      }|rt        j                  |      ni }|dk(  r| j                  j                  d      r*t        |t        j                  j                               }n5t        |t        j                  j                  | j                              }|j                  }|D cg c]  }t        |j                         }}|j                         }||d}	t        |	      S y c c}w )Nr   r   r`   r  r_  r$  r&  )r   r   r   r   r:  r  r  r=  r   r`   r   r   r[  r   rv  r   
rW   r   r`  ra  employee_filterfiltered_employeesr.  r  rZ  r   s
             rB   assigned_leave_select_filterr0    s    ++//&)K{{x(H&.djj"BGe<<  !<=1."8"8"<"<">O 2'//66\c\h\h 7 O -///ABCFFBB(..0#/LG$$+   C   Dc                 z   | j                   d   }t        j                  |      }d}|D ]  }	 t        j                  j                  |      }|j                  }|j                  dk(  r|j                          |dz  }n.t        j                  | t        dj                  |                    |dkD  r/t        j                  | t        d	j                  |
                   t!        ddi      S # t        $ rB}t        j                  | t        dj                  t        |                         Y d}~d}~ww xY w)zA
    This method is used to delete a bulk of leave requests.
    r  r   r   r   r/  z%{}'s leave request cannot be deleted.zAn error occurred: {}.Nz/{count}  leave request(s) successfully deleted.)rv  r  r  )r|   r   r   rM  r   r   r   rD  r   r
   r   r   r   rH  r[  r   r   )rW   r  rv  r   rU  r   r   s          rB   leave_request_bulk_deleter3  :  s%    ,,u
C
**S/CE P	P(00448H4IM$00H##{2$$&
=DDXNOP qy?FFUFST	

 I.//  	PNN7A&>&E&Ec!f&M$NOO	Ps   A?C//	D:87D55D:c                    | j                   j                  d      }|dk(  rd| j                  j                  d      rt        j
                  j                         }n*t        j
                  j                  | j                        }D cg c]  }t        |j                         }}|j                         }||d}t        |d      S c c}w )Nr   r`   r\  r$  r&  Fr'  )r   r   r:  r  rM  r   r`   r   r[  r   rv  r   r)  s          rB   leave_request_selectr5  \  s    ++//&)Ke<<  !:;$,,002I$,,33X_XdXd 4 I ,55CCK5L5//#K+KHGe,, 6r+  c                 F   | j                   j                  d      }| j                   j                  d      }|rt        j                  |      ni }|dk(  r| j                  j                  d      r*t        |t        j                  j                               }n5t        |t        j                  j                  | j                              }|j                  }|D cg c]  }t        |j                         }}|j                         }||d}	t        |	      S y c c}w )Nr   r   r`   r\  r_  r$  r&  )r   r   r   r   r:  r  rp  rM  r   r`   r   r   r[  r   rv  r   r-  s
             rB   leave_request_select_filterr7  p  s    ++//&)K{{x(H&.djj"BGe<<  !:;0,"6"6":":"<O 1%--44\c\h\h 5 O -///ABCFFBB(..0#/LG$$+   Cr1  c           	         | j                   d   }t        j                  |      }|D ]  }	 t        j                  j                  |      }|j                  }|j                  dk(  r0|j                          t        j                  | t        d             n.t        j                  | t        dj                  |                    t        dd	i      S # t        $ r)}t        j                  | t        d             Y d}~d}~ww xY w)
z?
    This method is used to delete bulk of leaves requests
    r  r   r   zLeave request deleted.z/You cannot delete leave request with status {}.r  Nr  r  )r|   r   r   rM  r   r   rD  r   r
   r   r   r   r   rH  r   )rW   r  r   rU  rD  r   s         rB   user_request_bulk_deleter9    s     ,,u
C
**S/C C	C(00448H4IM"))F##{2$$&  ./
 GNNvVWC" I.//  	CNN7A&@$ABB	Cs   BC	DD  Dc                 @   | j                   j                  d      }| j                  j                  }|dk(  r t        j
                  j                  |      }D cg c]  }t        |j                         }}|j                         }||d}t        |d      S c c}w )Nr   r`   rv  r&  Fr'  )r   r   r:  r;  rM  r   r   r[  r   rv  r   )rW   r   r:  r  r.  r  rZ  r   s           rB   user_request_selectr;    s    ++//&)K<<$$De ((//D/A	+45CCK5L5//#K+KHGe,, 6s   Bc                    | j                   j                  d      }| j                   j                  d      }|rt        j                  |      ni }| j                  j
                  }|dk(  ryt        |t        j                  j                  |            }|j                  }|D cg c]  }t        |j                         }}|j                         }	||	d}
t        |
      S y c c}w )Nr   r   r`   rv  r_  r&  )r   r   r   r   r:  r;  r  rM  r   r   r   r[  r   rv  r   )rW   r   r`  ra  r:  r.  r/  r.  r  rZ  r   s              rB   user_request_select_filterr=    s    ++//&)K{{x(H&.djj"BG<<$$De0l2299d9K

 -///ABCFFBB(..0#/LG$$  Cs   &C%c                    | j                   j                  d      }| j                   j                  d      }	 t        j                  |d      j	                         }| j
                  j                  dd       }| j                   j                  d      r| j                   j                  d      d   nd }|r1|r/t        j                  j                  ||      j                         nd }|r|j                  nd}d}|r|j                  j                         r|r|j                  j                         k\  rz|j                  |      }|j                  j                  dv r/|j                  j                   |k  r|j                  j                   n|}|j                  j                  d	k(  rd}||z  }|||||d
}	t#        | d|	      S #  d }Y oxY w)Nr   rt  rg  r   r   r   r  )carryforwardr  zno carryforward)r4  r   r   r  forcated_daysz7leave/leave_request/employee_available_leave_count.html)r   r   r   ry  r   r   r  r=  r   r   r   r  r   leave_type_next_reset_dateforcasted_leavesr  carryforward_maxr   )
rW   r   rt  start_date_formatr4  r   r   r  r@  r   s
             rB   employee_available_leave_countrE    s    KKOOO4M.J$--j*EJJL   !148I ;;}- 	M*1-  [ 	%%'[ 	& 	

%'  <K77PQM 	))DDF((CCEF (88D ,,>>67-->>AQQ )):: " 	 ((::>OO M) &*,&G JG Ys   $G Gzbase.add_penaltyaccountsc           	         | j                   j                         }t        j                  j	                  |      }t        |j                        }t        j                  j                  |j                        }| j                  dk(  rt        | j                        }|j                         r|j                  }t               }||_        |j                  |_        |j                  |_        |j                   |_        |j"                  |_        |j$                  |_        |j'                          t               }t)        j*                  | d       t-        | d||||d      S )z5
    This method is used to create the penalties
    r   rf  rv  r|   zPenalty/Fine addedz%leave/leave_request/penalty/form.html)	availabler}   r   ra   )r   r   rM  r   r   r   r   r=  r   r   r|   r   r   r'   r   deduct_from_carry_forwardr   minus_leavespenalty_amountr   r
   r   r   )rW   instance_idr   r   r}   rG  penalty_instancepenaltys           rB   cut_available_leaverN  	  s,    KK))+M##'';'7Hx';';<D&&--(:N:N-OI~~!',,/==?#}}%'G'/G$ :: - #+"6"6G$4$B$BG!#3#@#@G %5%D%DG"LLN%'DW&:;/" 		
	 	rI   c                 	   t         j                  j                  |      j                         }| j                  j
                  }t        |j                  |d      }| j                  j                  d      }|dk(  rdnd}| j                  j                         }| j                  dk(  rt        | j                        }|j                         r||j                  _        ||j                  _        |j#                          t$        j                  j                  |	      j'                  d
      }d}	|j)                         sd}	t        |j                  |d      }t+        j,                  | t/        d             t0        j                  j                  |j                        }
|
j)                         r|j                  j2                  j4                  	 p| j                  j
                  j                  |j                  j                  k(  r|j                  j2                  j4                  j6                  }t9        j:                  | j                  j
                  ||j                   dd|j                   d|j                   dd|j                   dd|j                   dt=        d      d|j                   z   d	       n| j                  j
                  j                  |j                  j2                  j4                  j                  k(  rc|j                  j6                  }t9        j:                  | j                  j
                  |dddddt=        d       d|j                   z   d	       n1|j                  j6                  |j                  j2                  j4                  j6                  g}t9        j:                  | j                  j
                  ||j                   dd|j                   d|j                   dd|j                   dd|j                   dt=        d      d|j                   z   d	       na|j                  j6                  }t9        j:                  | j                  j
                  |dddddt=        d       d|j                   z   d	       t?        | d!||	||d"      S t?        | d!||||||d#      S )$zP
    This method renders form and template to create Leave request comments
    r   r   r  r  targetr  request-filteruser-request-filterr|   r  -created_atFTComment added successfully!rv  z('s leave request has received a comment.u   تلقت طلب إجازة     تعليقًا.z-s Urlaubsantrag hat einen Kommentar erhalten.zLa solicitud de permiso de  ha recibido un comentario.u   La demande de congé de     a reçu un commentaire.r+  r,  chatbox-ellipsesr  r  r  r  r   r!  r   r"  z*Your leave request has received a comment.u,   تلقى طلب إجازتك تعليقًا.z/Ihr Urlaubsantrag hat einen Kommentar erhalten.z2Tu solicitud de permiso ha recibido un comentario.u/   Votre demande de congé a reçu un commentaire.r  &leave/leave_request/leave_comment.html)commentsno_commentsr  rU  )r}   r  ra   rQ  urlrU  ) rM  r   r   r   r:  r;  LeaverequestcommentFormr   r   r   r   r   r|   r   r   r   r  r   r  r  r   r
   r   r   EmployeeWorkInformationrK  rL  rE  r;   rI  r   r   )rW   leave_idrV  r.  r}   rQ  r_  r   r]  r^  	work_inforecs               rB   create_leaverequest_commentre  0  sf      ''8'4::<E
,,
#
#C" #h?D [[__X&F$6
<QCKK))+M~~&w||4==?(+DMM%',DMM$IIK*2299X9NWWH  K??$"*(+hGD Wa(E&FG/77>>!-- ? I !%%88MM  ||0033u7H7H7K7KK!--@@UUff  #LL55&)$)$5$5#66^!_&A%BSBSATTd$e','8'8&99f$g&A%BSBSATTo$p&>u?P?P>QQi$j%,^%<ehhZ?P%P!3
  1144 ,,??TTWWX $//@@#LL55&)!M$R$U$X$U%,-@%Ad588*DU%U!3
 "-->>!--@@UUff #LL55&)$)$5$5#66^!_&A%BSBSATTd$e','8'8&99f$g&A%BSBSATTo$p&>u?P?P>QQi$j%,^%<ehhZ?P%P!3
  ++<<CKK11"%I N Q T Q!()<!=$uxxj@Q!Q/
 8 (#."*%*		 	 0""	
 rI   c                    t         j                  |      }| j                  j                  |j                  k(  sQ| j                  j                  d      s6t        |       s+t        j                  | t        d             t        | d      S t        j                  j                  |      j                  d      }d}|j                         sd}| j                   r| j                   j#                  d      }| j$                  d	   }t        j                  j'                  |
      }g }|D ]4  }	t)               }
|	|
_        |
j-                          |j/                  |
       6  |j0                  j2                  |  t        | d|||d      S )z<
    This method is used to show Leave request comments
    zleave.view_leaverequestcommentr  decorator_404.htmlrT  rU  FTfiles
comment_idr   r\  )r]  r^  rU  )rM  r   r:  r;  r   r  r#   r
   r  r   r   r  r   r   r  r   r   r  r   r   LeaverequestFiler,  r   r_   rh  r   )rW   rb  rU  r]  r^  rh  ri  r  attachmentsr,  file_instances              rB   view_leaverequest_commentrm    s_    !%%h/M!!]%>%>><<  !ABw'!$?"@Ag344"**11X1FOOH K??}}%%g.[[.
%--11Z1@ 	.D,.M!%M }-		.
 	;'0 &*	
 rI   c                 V	   | j                   j                         }t        j                  j	                  |      j                         }| j                  j                  }t        |j                  |d      }| j                  dk(  rt        | j                        }|j                         r||j                  _        ||j                  _        |j!                          t"        j                  j	                  |      j%                  d      }d}|j'                         sd}t        |j                  |d      }t)        j*                  | t-        d	             t.        j                  j	                  |j                  
      }|j'                         r|j                  j0                  j2                  	 p| j                  j                  j                  |j                  j                  k(  r|j                  j0                  j2                  j4                  }	t7        j8                  | j                  j                  |	|j                   dd|j                   d|j                   dd|j                   dd|j                   dt;        d      d|j                   z   d	       n| j                  j                  j                  |j                  j0                  j2                  j                  k(  rc|j                  j4                  }	t7        j8                  | j                  j                  |	dddddt;        d      d|j                   z   d	       n1|j                  j4                  |j                  j0                  j2                  j4                  g}	t7        j8                  | j                  j                  |	|j                   dd|j                   d|j                   dd|j                   dd|j                   dt;        d      d|j                   z   d	       na|j                  j4                  }	t7        j8                  | j                  j                  |	dddddt;        d      d|j                   z   d	       t=        | d|||d      S t=        | d|||d      S )zU
    This method renders form and template to create Allocation request comments
    r   rP  r  r|   rT  rU  FTrV  rv  z3's leave allocation request has received a comment.u/   تلقت طلب تخصيص الإجازة لـ rW  z<s Anfrage zur Urlaubszuweisung hat einen Kommentar erhalten.u+   La solicitud de asignación de permisos de rX  u%   La demande d'allocation de congé de rY  r  r,  rZ  r[  z5Your leave allocation request has received a comment.uI   تلقى طلب تخصيص الإجازة الخاص بك تعليقًا.z=Ihr Antrag auf Urlaubszuweisung hat einen Kommentar erhalten.uB   Tu solicitud de asignación de permisos ha recibido un comentario.u<   Votre demande d'allocation de congé a reçu un commentaire.<leave/leave_allocation_request/leave_allocation_comment.htmlr]  r^  r  )r}   r  ra   )r   r   r  r   r   r   r:  r;  !LeaveallocationrequestcommentFormr   r   r|   r   r   r   r  r   LeaveallocationrequestCommentr  r   r
   r   r   ra  rK  rL  rE  r;   rI  r   r   )
rW   rb  r   rV  r.  r}   r]  r^  rc  rd  s
             rB    create_allocationrequest_commentrs    sQ    KK))+M"**11X1>DDFE
,,
#
#C, #h?D ~~0>==?(+DMM%',DMM$IIK4<<CC# D h}%   K??$"4(+hGD Wa(E&FG/77>>!-- ? I !%%88MM  ||0033u7H7H7K7KK!--@@UUff  #LL55&)$)$5$5#66i!j&UV[VgVgUhhx$y','8'8&99u$v&QRWRcRcQdd  %A&KEL]L]K^^v$w%,-L%M $UXXJ/&0!3  1144 ,,??TTWWX $//@@#LL55&)!X$o$c$h$b%,-L%M $UXXJ/&0!3 "-->>!--@@UUff #LL55&)$)$5$5#66i!j&UV[VgVgUhhx$y','8'8&99u$v&QRWRcRcQdd  %A&KEL]L]K^^v$w%,-L%M $UXXJ/&0!3  ++<<CKK11"%T k _ d ^!()H!I 
+",/ N (#."*  FX]C rI   c           	         t         j                  |      }| j                  j                  |j                  k(  sQ| j                  j                  d      s6t        |       s+t        j                  | t        d             t        | d      S t        j                  j                  |      j                  d      }d}|j                         sd}| j                   r| j                   j#                  d      }| j$                  d	   }t        j                  j'                  |
      }g }|D ]4  }	t)               }
|	|
_        |
j-                          |j/                  |
       6  |j0                  j2                  |  t        | d||||d      S )zA
    This method is used to show Allocation request comments
    z(leave.view_leaveallocationrequestcommentr  rg  rT  rU  FTrh  ri  r   ro  )r]  r^  r  leave_alloc_request)r  r   r:  r;  r   r  r#   r
   r  r   r   rr  r   r   r  r   r   r  r   r   rj  r,  r   r_   rh  r   )rW   rb  ru  r]  r^  rh  ri  r  rk  r,  rl  s              rB   view_allocationrequest_commentrv  L  sh    155h?!!%8%D%DD<<  !KLw'!$?"@Ag344,44;; < h}  K??}}%%g.[[.
/77;;z;J 	.D,.M!%M }-		.
 	;'F &"#6		
	 	rI   c                    d}t         j                  |      }|j                  j                  }| j                  j
                  |j                  k(  s&| j                  j                  d      st        |       r:|j                          t        j                  | t        d             t        |      S d| d}t        j                  | t        d             t        |      S )zC
    This method is used to delete Allocation request comments
    r  z*leave.delete_leaveallocationrequestcommentComment deleted successfully!zJ
                    <span hx-get="/leave/allocation-request-view-comment/zK/" hx-target="#commentContainer" hx-trigger="load"></span>
                r  )rr  r   r  r   r:  r;  r   r  r#   r   r
   r   r   r  r   )rW   ri  scriptr  r  s        rB    delete_allocationrequest_commentrz  y  s     F+00<G##&&J!!W%8%88<<  !MNw'!$C"DE 	JJT V 	!$?"@ArI   c                 D   d}| j                   j                  d      }| j                   d   }| j                   d   }t        j                  |      }| j                  j
                  |j                  k(  s&| j                  j                  d      st        |       rXt        j                  j                  |      j                          t        j                  | t        d             t#        |      S t        j                   | t        d             d	| d
}t#        |      S )#
    Used to delete attachment
    r  r  rb  ri  leave.delete_leaverequestfiler   File deleted successfullyr  zF
                <span hx-get='/leave/allocation-request-view-comment/zK/' hx-target='#commentContainer' hx-trigger='load'></span>
                )r   r  rr  r   r:  r;  r   r  r#   rj  r   r   r   r
   r   r   r  r   rW   ry  r  rb  ri  r  s         rB   delete_allocation_comment_filer    s    
 F
++

e
$C{{:&H\*J+00<G!!W%8%88<<  !@Aw'  ''s'3::<!$?"@A 	 	!$?"@AFFNZ P rI   c                    t        t        |      }|j                  dk(  s|j                  dk(  r\t        j                  j	                         }t        j                  j	                         }t        j                  j	                         }nJt        j                  j                  t        |j                  j                  j                        t        |j                  j                  j                        z  t        |j                  j                  j                        z  |j                  |j                        j                  |      j                  t        d      t        d      z        }|j                  |j                  j                  j                        }|j                  |j                  j                  j                        }t        | j                   |      j"                  }t%        || j                   j'                  d	            }t)        j*                  |j,                  D cg c]  }|j.                   c}      }t1        | d
||t3        j4                         |||d      S c c}w )zA
    This method is used to filter or view the leave clashes
    r   r  ri  r  )0employee_id__employee_work_info__job_position_id)+employee_id__employee_work_info__company_id)rs  rt  rh  r   z&leave/leave_request/leave_clashes.html)rU  r"  rn  r   clashed_due_to_departmentclashed_due_to_job_position)r   rM  rD  r   r   r   r   r   rK  r>  job_position_id
company_idru  rt  r   rp  r   r   r   r   r   r   rw  r   r   r   ry  )	rW   r   recordr  r  r  r~  r   r   s	            rB   view_clashesr    s    |0@AF}}
"fmm{&B+3388:$0$8$8$=$=$?!&2&:&:&?&?&A#   ''GMGYGYGlGlGzGz IOI[I[InInI~I~ @F@R@R@e@e@p@p
 !'$// (  W(W)WQk*Qj-AAB# 	( %9$?$?;A;M;M;`;`;n;n %@ %
! ';&A&A=C=O=O=b=b=r=r 'B '
# .gkk;OPSS()=w{{v?VW::%9%E%EFFL 0#+ JJL()B+F	
  	Gs   8I8zleave.view_leavegeneralsettingc                    t         j                  j                         xr( t         j                  j                         j                  }t
        j                  j                  dddd      \  }}||d}t        | d|      S )NTzCompensatory Leave Typepaid)r]   payment)r   defaults)enabled_compensatoryr   zcompensatory_settings.html)r   r   r   r   r   r   get_or_creater   )rW   r  r   creater   s        rB   r   r     s     	##**, 	C''--/BB  #**88"3G 9 J (<:VG'7AArI   zleave.add_leavegeneralsettingc                    t         j                  j                         }|r|n	t               }d| j                  j	                         v |_        |j                          d| j                  j	                         v r*t        j                  | t        d             t        d      S t        j                  | t        d             t        d      S )zN
    This method is used to enable/disable the compensatory leave feature
    r   z+Compensatory leave is enabled successfully!z,Compensatory leave is disabled successfully!r  )r   r   r   r   rc   r   r   r
   r   r   r   )rW   r   s     rB   enable_compensatory_leaver    s     -44::<06I6K  -AGKKDTDTDV,V)w{{//11!$Q"RS  	!$R"STrI   c                    d}t         j                  |      }| j                  j                  |j                  k(  s&| j                  j                  d      st        |       r:|j                          t        j                  | t        d             t        |      S t        j                  | t        d             d|j                  j                   d}t        |      S )z>
    This method is used to delete Leave request comments
    r   leave.delete_leaverequestcommentrx  r  =
            <span hx-get="/leave/leave-request-view-comment/\/?&amp;target=leaveRequest" hx-target="#commentContainer" hx-trigger="load"></span>
        )r  r   r:  r;  r   r  r#   r   r
   r   r   r  r  r   r   )rW   ri  ry  r  s       rB   delete_leaverequest_commentr  
  s     F!&&z2G!!W%8%88<<  !CDw'!$C"DE 	 	!$?"@A==D=O=O=R=R<S T	 rI   c                 D   d}| j                   j                  d      }| j                   d   }| j                   d   }t        j                  |      }| j                  j
                  |j                  k(  s&| j                  j                  d      st        |       rXt        j                  j                  |      j                          t        j                  | t        d             t#        |      S t        j                   | t        d             d	| d
}t#        |      S )r|  r  r  rb  ri  r}  r   r~  r  r  r  )r   r  r  r   r:  r;  r   r  r#   rj  r   r   r   r
   r   r   r  r   r  s         rB   delete_leave_comment_filer  !  s    
 F
++

e
$C{{:&H\*J!&&z2G!!W%8%88<<  !@Aw'  ''s'3::<!$?"@A 	 	!$?"@A==EJ G	 rI   
attendance)CompensatoryLeaveRequestCompensatoryLeaverequestCommentc                 h   | j                   j                  d      rt        j                  j                  | j                   j                  d            }t	        |      }t        |j                  dd            }t               }||j                  d   _	        t        dd|i      }t        |       S y)	z
        function used to return attendance dates that taken on leave days .

        Parameters:
        request (HttpRequest): The HTTP request object.

        Returns:
        GET : return attendance dates
        r   r   r   attendance_dateattendance_idz+leave/compensatory_leave/attendance_id.htmlr}   N)r   r   r(   r   get_leave_day_attendancer   r   CompensatoryLeaveFormr   choicesr   r   )rW   r   holiday_attendanceattendance_datesr}   r  s         rB   get_leave_attendance_datesr  =  s     ;;??=)''++w{{}/M+NH!9(!C#"..t5FG  )*D3CDKK(0,=DM  =/33 *rI   c                 @   | j                   j                  d      }t        j                  j	                  |      j                          | j                   d   }t        j                  j                         }| j                  j                  d      s|j	                  | j                        }| j                   j                  d      r$|j	                  |      j                  d      }d	}n#|j	                  |      j                  d      }d
}t        | |||d      S )z+
        Used to delete attachment
        r  r   rb  ,leave.delete_compensatoryleaverequestcommentemployee_id__employee_user_idr   rT  rU  8leave/compensatory_leave/compensatory_leave_comment.htmlr\  )r]  r  )r   r  rj  r   r   r   r  r`   r:  r  r   r  r   )rW   r  rb  r]  r  s        rB    delete_comment_compensatory_filer  Y  s    
 kk!!%(  ''s'3::<;;z*2::>>@||$$%STW\\RH;;??>*(;DD]SHQH(;DD]SH?H$&
 	
rI   c                 \   | j                   j                  d      rZt        j                  j	                  |      }| j
                  j                  d      s|j	                  | j
                        }d}nYt        j                  j	                  |      }| j
                  j                  d      s|j	                  | j
                        }d}|j                         j                  j                  }|j                          t        j                  | t        d             t        ||      S )	zF
        This method is used to delete Leave request comments
        r   r   r  r  zview-compensatory-leave-commentr  zleave-request-view-commentrx  )r   r   r  r   r   r:  r  r  r   r  r   r   r
   r   r   r   )rW   ri  r  r   rb  s        rB   (delete_leaverequest_compensatory_commentr  s  s     ;;??>*5==DD
DSG<<((> "..w||.T<L)1188J8GG<<(()KL!..w||.T7L==?--00!$C"DEh//rI   c           	         | j                   j                  }t        j                  j	                         j                  d      }t        | j                  |      j                  }t        | |d      }| j                  j                  d      }t        ||      }t        j                  t        |j                  j!                  dd                  }t        j                  j#                  |j$                        j                  d      }t        | j                  |      j                  }| j                  j                  d      }t        ||      }t        j                  t        |j                  j!                  dd                  }t               }	| j                  j'                         }
t)        |
      }t+        t        |      }|||
|	j,                  |t.        j0                  ||d	}t3        | d
|      S )z
        function used to view compensatory leave requests.

        Parameters:
        request (HttpRequest): The HTTP request object.

        Returns:
        GET : return compensetory leave request view template
        r^  z#leave.view_compensatoryleaverequestr   r   Tr   rv  r  )my_comp_leave_requestscomp_leave_requestsra   r}   r   rm  r   r  z5leave/compensatory_leave/compensatory_leave_view.html)r:  r;  r  r   r`   r  CompensatoryLeaveRequestFilterr   r   r    r   r   r   r   r   rw  r   r   r   r   r   r!   r}   r  r   r   )rW   r   r   r   r  r   r  r   r  comp_leave_requests_filterr   r   r   s                rB   view_compensatory_leaver    s    <<,,+33779BB5I1'++xHKK%XD
 kkoof-+HkBzz$00<<T<MN
 ":!A!A!H!H  "I "

(5/ 	 "@KK/"

" 	 !2!./E~!V**'33??4?PQ
 &D%E"--/]+	%&>	J	&<#6.33$6==(.	
 Lg
 	
rI   c                    | j                   j                  d      }| j                  j                  }| j                   j                  d      }| j                   j                  d      }| j                   j	                         }d}t        | j                         j                  j                  d      }t        j                  j                  |j                        j                  d      }t        | j                   |      j                  }t        | |d      }| j                   j                  d      rt        | |d      }t        | |d      }|rt        |||d      }	t        |||d      }
|	D cg c]  }|d	   	 }}|D cg c]  }|j                  D ]  }|j                   ! }}}t!        j"                  t%        |            }|
D cg c]  }|d	   	 }}|D cg c]  }|j                  D ]  }|j                   ! }}}t!        j"                  t%        |            }d
}nt'        ||      }	t'        ||      }
t!        j"                  t%        |	j                  j)                  dd                  }t!        j"                  t%        |
j                  j)                  dd                  }t+        |      }t-        t        |      }|j/                  dd       |	|
|||||d}t1        | ||      S c c}w c c}}w c c}w c c}}w )zD
        function used to view compensatory leave requests.
        r   r   r  z9leave/compensatory_leave/compensatory_leave_req_list.htmlr^  rv  r  r$   r   r  r   Tr   N)r  r  ra   r   r   r   r  r  )r   r   r:  r;  r   r  r   r  r  r   r   r   r    r$   r/   rw  r   r   r   r   r   r   r!   r9  r   )rW   r   r   r   r   r   r  comp_leave_requests_filteredmy_comp_leave_requests_filteredr  r  r  r  rt   r   r  r   r  r   r   s                       rB   filter_compensatory_leaver    s    (<<,,kkoof- 2--/N (FKK(

"XXe_ 	% +C*J*J*Q*Q  +R +

(5/ 	( +IKK8+

" 	( (:13V(
$
 ;;??8$+15x,( /58(/+
 "3,e[&# &7/&"
 7JJU5=JKJ)4 %UEVEV9AG   ::d7m4L6LMU5=MKM)4 %UEVEV9AG  #jjg7OW  #0,k# &3/&"  ::(44@@D@QRL #jj+77CCDtCTUO
 ]+	%&>	J	h% $7&<$(.
 gx99U K
 Ns   /K5$K:L $Lc                    | j                   j                  }d}d}|dk7  r t        j                  j	                  |      }t        |      }| j                  dk(  rt        | j                  |      }|j                         r|j                         }t        |j                  |j                  j                               |_        |j                          |dk7  r*t        j                   | t#        d             t%        d      S t        j                   | t#        d             t%        d      S ||d	}t'        | ||      S )
a  
        function used to create or update compensatory leave request.

        Parameters:
        request (HttpRequest): The HTTP request object.

        Returns:
        GET : return leave allocation request form template
        POST : return leave allocation request view
        z-leave/compensatory_leave/comp_leave_form.htmlNr   r   r|   zCompensatory Leave updated.zCompensatory Leave created.r.  )r   r}   )r:  r;  r  r   r   r  r   r|   r   r   r4   r   r  r`   r?  r
   r   r   r   r   )rW   comp_idr   r  r   r}   comp_reqr   s           rB   create_compensatory_leaver    s    <<,,Bd?/77;;w;GH$h7>>V#(ID}}99;*9(((*@*@*D*D*F+' d?$$Wa0M.NO $$PQQ $$Wa0M.NO#$PQQ !
 gx11rI   z%leave.delete_compensatoryleaverequestT)permre  manager_accessc                 Z   	 t         j                  j                  |      j                         }t	        j
                  | t        d             | j                  j                  d      dk(  rt        t              S t        d      S #  t	        j                  | t        d             Y [xY w)z
        function used to delete compensatory leave request,
        and reload the list view of compensatory leave requests.
        r   z#Compensatory leave request deleted.Sorry, something went wrong!r   r  r  )r  r   r   r   r
   r   r   r   r   r   r  r   rW   r  comp_leave_reqs      rB   delete_compensatory_leaver  A  s    	G5==AAWAMTTVNWa(M&NO ;;??6"f,566 EFF	GNN7A&D$EFs   AB !B*z%leave.change_compensatoryleaverequest)r  c                    	 t         j                  j                  |      }|j                  dk(  rd|_        |j	                          |j                          t        j                  | t        d             t        j                  t              5  t        j                  | j                  j                  |j                   j"                  ddddd	t%        d
      d|j&                   z          ddd       nt        j(                  | t        d             | j,                  j                  d      rt/        d      S t1        t2              S # 1 sw Y   >xY w#  t        j*                  | t        d             Y dxY w)z
        function used to approve compensatory leave request,
        and reload the list view of compensatory leave requests.
        r   r   r   z$Compensatory leave request approved.z1Your compensatory leave request has been approveduQ   تمت الموافقة على طلب إجازة الاعتذار الخاص بكz0Ihr Antrag auf Freizeitausgleich wurde genehmigtz6Su solicitud de permiso compensatorio ha sido aprobadau8   Votre demande de congé compensatoire a été approuvéeview-compensatory-leaver,  r  r  r  r  r   r!  r   Nz@The compensatory leave request is not in the 'requested' status.r  
individualr  )r  r   r   rD  assign_compensatory_leave_typer   r
   r   r   rF  rG  rH  r;   rI  r:  r;  r   rE  r   r   r  r   r   r   r   r  r  s      rB   approve_compensatory_leaver  Y  sD   	G5==AAWAMN$$3(2%==?##%  !,R*ST((3 KK11"0"<"<"M"MP s R X Z!()B!C !2!2 34"5
  Z ;;??<( EFF122/ &	GNN7A&D$EFs%   BE AE/(E EE !E;c                 h   t         j                  j                  |      }|j                  dk(  s|j                  dk(  r4t	               }| j
                  dk(  r
t	        | j                        }|j                         r|j                  d   |_	        d|_        |j                          |j                          t        j                  | t        d             t        j                   t"              5  t%        j&                  | j(                  j*                  |j,                  j.                  dd	d
ddt1        d      d|j2                   z          ddd       t5        d      S t7        | d||d      S t        j8                  | t        d             t5        d      S # 1 sw Y   t5        d      S xY w)a'  
        function used to Reject compensatoey leave request.

        Parameters:
        request (HttpRequest): The HTTP request object.
        comp_id : compensatory leave request id

        Returns:
        GET : It returns to the default compensatory leave request view template.

        r   r   r   r|   r  r  z$Compensatory Leave request rejected.z1Your compensatory leave request has been rejectedu6   تم رفض طلبك للإجازة التعويضيةz0Ihr Antrag auf Freizeitausgleich wurde abgelehntz5Se ha rechazado su solicitud de permiso compensatoriou6   Votre demande de congé compensatoire a été rejetéer  r,  r  Nr  z=leave/compensatory_leave/compensatory_leave_reject_form..html)r}   r  r  )r  r   r   rD  "CompensatoryLeaveRequestRejectFormr   r|   r   r  r  exclude_compensatory_leaver   r
   r   r   rF  rG  rH  r;   rI  r:  r;  r   rE  r   r   r   r   r   )rW   r  r  r}   s       rB   reject_compensatory_leaver    sy     299===I  K/>3H3HJ3V57D~~'9',,G==?373D3DX3NN0,6N)"==?"'')$$Wa0V.WX#,,Y7 #LL55&4&@&@&Q&Q!T$\$V$[$\%,-F%G $^%6%6$78&9
 ((MNNO'2  NN7A&V$WX EFF) ((MNNs   2AFF1c                 4   | j                   j                  d      }|r$t        j                  |      }t	        ||      \  }}t
        j                  j                  |      }|t        | j                   j                  d            |d}t        | d|      S )a#  
        function used to present the compensatory leave request detailed view.

        Parameters:
        request (HttpRequest): The HTTP request object.
        comp_leave_id : compensatory leave request id

        Returns:
        return compensatory leave request single view
        r   r   r  )r  r  r   r   r   z:leave/compensatory_leave/individual_view_compensatory.htmlr  )	r   r   r   r   r   r  r   r   r   )rW   comp_leave_idr   r   r   r   r  r   s           rB   "compensatory_leave_individual_viewr    s     $KKOOO<::&78L#2<#O K199===O,'(EF.#
 H
 	
rI   c                    t         j                  j                  |      j                  d      }d}|j	                         sd}| j
                  r| j
                  j                  d      }| j                  d   }t         j                  j                  |      }g }|D ]4  }t               }	||	_
        |	j                          |j                  |	       6  |j                  j                  |  t        | d|||d	      S )
zD
        This method is used to show Leave request comments
        rT  rU  FTrh  ri  r   r  rp  )r  r   r   r  r   r   r  r   r   rj  r,  r   r_   rh  r   r   )
rW   r  r]  r^  rh  ri  r  rk  r,  rl  s
             rB   view_compensatory_leave_commentr    s     3::AA$ B 

(=
! 	  K==MM))'2E \2J5==AAZAPGK 2 0 2%)"""$""=1	2
 GMM{+F$*+
 	
rI   c                 	   t         j                  j                  |      j                         }| j                  j
                  }t        |j                  |d      }| j                  j                  d      }|dk(  rdnd}| j                  j                         }| j                  dk(  rt        | j                        }|j                         r||j                  _        ||j                  _        |j#                          t$        j                  j                  |	      j'                  d
      }d}	|j)                         sd}	t        |j                  |d      }t+        j,                  | t/        d             t0        j                  j                  |j                        }
|
j)                         r|j                  j2                  j4                  	 r| j                  j
                  j                  |j                  j                  k(  r|j                  j2                  j4                  j6                  }t9        j:                  | j                  j
                  ||j                   dd|j                   dd|j                   dd|j                   dd|j                   dt=        d      d|j                   z   d	       n| j                  j
                  j                  |j                  j2                  j4                  j                  k(  rc|j                  j6                  }t9        j:                  | j                  j
                  |ddddd t=        d      d|j                   z   d	       n2|j                  j6                  |j                  j2                  j4                  j6                  g}t9        j:                  | j                  j
                  ||j                   d!d"|j                   dd|j                   dd#|j                   dd|j                   dt=        d      d|j                   z   d	       na|j                  j6                  }t9        j:                  | j                  j
                  |ddddd t=        d      d|j                   z   d	       t?        | d$||	|d%      S t?        | d$|||||d&      S )'z]
        This method renders form and template to create Compensatory leave comments
        r   rP  r  rQ  r  rR  rS  r|   rT  rU  FTrV  rv  z5's Compensatory leave request has received a comment.u1   تلقى طلب إجازة الاعتذار لـ rW  z%Der Antrag auf Freizeitausgleich von z hat einen Kommentar erhalten.z)La solicitud de permiso compensatorio de rX  u&   La demande de congé compensatoire de rY  r  r,  rZ  r[  z7Your compensatory leave request has received a comment.uE   تلقى طلب إجازة العوض الخاص بك تعليقًا.z>Ihr Antrag auf Freizeitausgleich hat einen Kommentar erhalten.z@Su solicitud de permiso compensatorio ha recibido un comentario.u=   Votre demande de congé compensatoire a reçu un commentaire.z5's compensatory leave request has received a comment.u/   تلقى طلب إجازة التعويض لـ z&El pedido de permiso compensatorio de r  rp  )r}   r  ra   rQ  r_  ) r  r   r   r   r:  r;  #CompensatoryLeaveRequestcommentFormr   r   r   r   r   r|   r   r   r   r  r   r  r  r   r
   r   r   ra  rK  rL  rE  r;   rI  r   r   )rW   r  
comp_leaver.  r}   rQ  r_  r   r]  r^  rc  rd  s               rB   !create_compensatory_leave_commentr    s    .55<<<NTTV
ll''2$'FF*E
 *"(N":@U--/>>V#6w||DD}},/)+5(		:BBII) J (=)  $("&K:,/FF*M   !,I*JK3;;BB * 6 6 C 	 ##%"..AAVV#$ #<<4477:;Q;Q;T;TT * 6 6 I I ^ ^ o o   #KK ' 9 9*-(2(>(>'??t%u*[\f\r\r[s  tD  )E*OPZPfPfOg  hF  )G*ST^TjTjSk  lG  )H*PQ[QgQgPh  iA  )B)01J)K$("8*9%7 $LL5588)55HH]]``a #-"8"8"I"IC"KK ' 9 9*-%^(o(h(j(g)01J)K$("8*9%7 !+ 6 6 G G * 6 6 I I ^ ^ o o#C #KK ' 9 9*-(2(>(>'??t%u*YZdZpZpYq  rB  )C*OPZPfPfOg  hF  )G*PQ[QgQgPh  iD  )E*PQ[QgQgPh  iA  )B)01J)K$("8*9%7 )44EE#LL55&)!Z$k$d$f$c%,-F%G $Z]]O4&5!3 N$,'2&3  F+# 

 
	
rI   ra  c                    | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }	 t        j                  |d      }t        j                  |d      }||z
  }t	        |j
                  dz         D cg c]  }|t        |      z    }}t        dd	      }	|	j                  j                  ||
      }
dt        |
j                  dd            i}t        |      S c c}w # t        $ r*}t        j                  |       t        |      cY d }~S d }~ww xY w)Nrt  ru  r   rg  r/  r  ra  rb  rc  )r   interview_date__inr  candidate_id__nameTr   )r   r   r   ry  r  r  r   r1   r   r   r   r   r   rH  r*   r   )rW   rt  ru  r   start_date_objend_date_objdeltar  	date_listr  r  rY   r   s                rB   check_interview_conflictsr  v  s1   [[__\2
;;??:.kkoom4	#%..z:FN#,,XzBL"\1E<A%**q.<Q78!22I  !8'/B! +2299'I : J
 d**+?d*KH
  ))!"  	#LLO?"	#s2   AD D	4AD 	D 	ED<6E<Ec                 6   t         j                  j                         }|s t         j                  j                  d      }| j                  dk(  r<| j
                  j                  d      }|rd|_        nd|_        |j                          t        | dd|i      S )NT)enabledr|   r  Fz,leave/settings/past_leave_restrict_view.htmlenabled_restriction)
EmployeePastLeaveRestrictr   r   r  r   r|   r   r  r   r   )rW   r  r  s      rB   employee_past_leave_restrictionr    s     4;;AAC7??FFtFT~~,,""9-*.'*/'  "6	 34 rI   c           
         | j                   }| j                   j                  }t        j                  d      rt        j
                  j                  |      }|j                  j                         j                  d      }t        j
                  j                         rGt        j
                  j                         j                  r|j                  j                         }nd}d}|r-t        j                  |D cg c]  }|j                   c}      nt        j                  g       }t!        j"                         }t$        j'                         }t)        | d|||||d      S c c}w )z>
    This method is used to view own profile of employee.
    rV  rv  Tr  Nz"employee/profile/profile_view.html)r   r  leave_request_idsrn  now)r:  r;  r	   rs  rM  r   r   r   r`   r   r   r   r   r   r   r   r   ry  timezoner  r   )	rW   r:  r   	instancesr  r   r  ry  r  s	            rB   employee_profile_leave_tabr    s+   
 <<D||((H! ((//H/E	..224<<15 = 
  ''--/#++113FF"22668K	  	

	:HHKK:;ZZ^ 
 NNE
,,.C, &!2!	

 
 ;s   <E&c                 @   t         j                  j                  |      }t        j                  d      r t
        j                  j                  |      nd}|r-t        j                  |D cg c]  }|j                   c}      nt        j                  g       }|j                  j                         }| j                  j                  dg       }t         j                  j                  |      }	t        j                  t        |	| j                  j                  d            j                  D cg c]  }|j                   c}      }
t!        |
t"              rt%        j&                  |
      n|
}|j                  }d}d}t)        |      D ]8  \  }}||k(  s|t+        |      dz
  k(  rd}n||dz      }|d	k(  rd}n||dz
     } n ||||t-        j.                         |d
}| j0                  j2                  |k(  r||d<   n||d<   t5        | d|      S c c}w c c}w )z=
    This method is used to view profile of an employee.
    r   rV  rv  Nr/  r   r   r/  r   )r   r   r   r   rn  r  r  employee_leavesztabs/leave-tab.htmlr  )r(   r   r   r	   rs  rM  r   r   r   r   r   r`   sessionr   r   rw  
isinstancer[  astliteral_eval	enumerater7  r   ry  r:  r;  r   )rW   r   r   r   r  r   r  r  filtered_employee_idsr/  request_ids_strr   r   r   r   rS   r  r   s                     rB   "employee_view_individual_leave_tabr    s   
 ##v#.H W% 	###9   	

	:HHKK:;ZZ^ 
 ..224O#OO//0DbI!))008M0Njj *"GKKOOF$;k		
 KK	
O os+ 	)  ++KKG"<0 v[ L)A--&uqy1z"*5195 $

.G ||  H,!0%4!"'0'BBo ;	
s   -H2Hc                 h   | j                   j                         }| j                   j                  d      }t        j                  j                  ddt        j                               }t        | |d      }t        j                  j                  dd      }|rA|D  cg c]  } | j                  j                   }} |D cg c]  }|j                  |vs| }}t        ||      }t        j                  |D cg c]  }|j                   c}      }t         d|||d	      S c c} w c c}w c c}w )
Nr   r   T)rD  r  r  r  Fr_  z.request_and_approve/leave_request_approve.html)rY  r   ra   )r   r   r   rM  r   r   r   ry  r    r   r   r   r   r   r   r   )	rW   r   r   rY  r|  r}  rV  r   leave_requests_idss	            rB   leave_request_and_approver    s1   KK))+M++//&)K!))00#

 1 N
 (!<N
 ;BBIIu J  @VWWW--00W	W  .
1JE
 
 #>;?N$PXX[[$PQ8,.	
	 	 X

 %Qs   D%D*D*:D/c                 f   | j                   j                         }| j                   j                  d      }t        j                  j                  dd      }t        | |d      }t        ||      }t        j                  |D cg c]  }|j                   c}      }t        | d|||d      S c c}w )Nr   r   T)rD  r  r  z1request_and_approve/leave_allocation_approve.html)allocation_reqestsreqests_idsra   )r   r   r   r  r   r   r    r   r   r   r   r   )rW   r   r   r  r   allocation_reqests_idss         rB   leave_allocation_approver  @  s    KK))+M++//&)K/77>>4 ?  ,#%H ''9;G!ZZ%788 ;"41	
	 	 	9s   B.r  r>   )__doc__r  rF  r   collectionsr   r   r   r   urllib.parser   r   pandasra   django.appsr	   django.contribr
   django.core.paginatorr   	django.dbr   django.db.modelsr   r   django.httpr   r   django.shortcutsr   r   r   django.urlsr   django.utils.encodingr   django.utils.translationr   r   r   r   django.views.decorators.httpr   base.filtersr   
base.formsr   base.methodsr   r   r   r   r    r!   r"   r#   r$   base.modelsr%   r&   r'   employee.modelsr(   horilla.decoratorsr)   r*   r+   r,   r-   r.   horilla.group_byr/   horilla.horilla_settingsr0   horilla.methodsr1   r2   leave.decoratorsleave.filtersleave.formsleave.methodsr4   r5   r6   r7   r8   r9   leave.modelsleave.threadingr:   notifications.signalsr;   rz   r   r   r   r   r   r   r   r   r  r[  r  r  r~  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r!  r;  rB  rG  rL  rN  rP  rS  rW  r]  rc  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  "leave_allocation_change_permissionr  "leave_allocation_reject_permissionr  r  "leave_allocation_delete_permissionr"  r*  r0  r3  r5  r7  r9  r;  r=  rE  rN  re  rm  rs  rv  rz  r  r  r   r  r  r  rs  r  r  r  r  r  is_compensatory_leave_enabledr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r?   rI   rB   <module>r     s      # . . *   # + ! . 2 @ @  + 2 6 = & )
 
 
 A @ $  / 9 G      / (%P *+X , X* +,# - #L )*X +  X. +, -  < -.! / !H -.*% / *%Z +,/ -  /:& +,F -  FR ,-P . Pf ,- . . k  k\ ./D 0  DN ./( 0  (< ./jG 0 jGZ ./&F 0 &FR ./	F 0 	F ./S 0 Sl ,?  ,?^ ,-Q .  Q6 -.v /  vr ./' 0 'T ./ 0  . ./4 0  4n -.P /  Pf 01$ 2  $N 01 2 2   2F vh230 4  0('. -.T" / T"n  . L  L ./ 0  D  4   4 12 3  > 12> 3  >0 124 3  4: ./! 0 ! ./% 0 %  s  sl n  nb G  G6    F   : E EP X  Xv   > ,- . 0 : :2 01!< 2 !<H E EB  Y  YF " "D B" B"J /" /"d +" +"\ /" /"d {  {| 4 4n   D 3  3l P6  P6f #%;J &  ;J| #%1G & 1Gh #%<C &  <C~ #%13 &  13h - -& % %: vh./0 0   0> - -& % %: vh0   04 - - % %, 3  3l -.! /  !H u  up (  (V p  pf (  (V     ,    0 9  9x 56
B 7 
B 45 6 "     *    0 4\"V4 46 
 
2 0  0* "$0
 % 0
d "$V:  % V:p "$#2  % #2J "$4&
G  % G  "$CD#3 E  % #3J "$CD+G E  % +GZ "$
  % 
: "$
  % 
B "$w
  % w
t 4]##> 56 7 & % %P BC BCJ # #L  rI   