
    siW                        d Z ddl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mZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:  ee#d       e ed      d       G d de)                    Z; ee#d       e ed      d       G d de'                    Z< ee#d       e ed      d       G d  d!e(                    Z= ee#d       e ed      d       G d" d#e)                    Z> ee#d       e ed      d       G d$ d%e%                    Z? ee#d       e ed&      d       G d' d(e&                    Z@ ee#d       G d) d*e<             ZAej                  j                   ed+      d,f ed-      d.f ed/      d0fg       y)1z2
This page handles the cbv of leave requests page
    N)Any)messages)Q)HttpResponse)get_object_or_404render)resolvereversereverse_lazy)method_decorator)gettext_lazy)ViewPenaltyList)manager_can_enter)PenaltyFilter)choosesubordinatesfiltersubordinates)PenaltyAccounts)login_required)HorillaDetailedViewHorillaFormViewHorillaListViewHorillaNavViewTemplateView)LeaveRequestFilter)LeaveRequestCreationFormLeaveRequestExportForm) filter_conditional_leave_request)AvailableLeaveLeaveRequest	LeaveType)LeaveMailSendThread)multiple_approvals_check)notifydispatch)nameleave.view_leaverequestc                       e Zd ZdZdZy)LeaveRequestsViewz&
    for leave requests page view
    z+cbv/leave_requests/leave_requests_home.htmlN)__name__
__module____qualname____doc__template_name     </var/www/python-projects/worksol/leave/cbv/leave_requests.pyr(   r(   '   s     BMr/   r(   c                   h    e Zd ZdZdeddf fdZ fdZ fdZeZ	e
ZdZ ed	      d
f ed      df ed      df ed      df ed      df ed      df ed      df ed      df ed      dfg	ZdZg dZdZdZddd Zd! ed"      d#fd$ ed%      d&fd' ed(      d)fd* ed+      d,fgZd-Z xZS ).LeaveRequestsListViewz
    Lits view of the page
    kwargsreturnNc                     t        |   di | t        d      | _        d| _        | j
                  j                  j                  d      r	dg| _        y y )Nrequest-filterleaveRequestzleave.change_leaverequeststatusr.   )	super__init__r
   
search_urlview_idrequestuserhas_permbulk_update_fieldsselfr3   	__class__s     r0   r:   zLeaveRequestsListView.__init__8   sP    "6"!"23%<<%%&AB'/jD# Cr/   c                    |j                   j                  d      }|r?t        |d   t              r,|d   j	                  d      rt        j                  |d         }|D cg c]'  }t        |      j                         st        |      ) }}g }|D ]k  }t        j                  j                  |      }|j                  j                  |j                  j                  j                  k7  s[|j!                  |       m |j                  j"                  r|}t        |      g}|j                   j%                         |_         |j                   j'                  d|       t(        | U  |      S c c}w )Ninstance_idsr   [id)POSTgetlist
isinstancestr
startswithastliteral_evalisdigitintr   objectsgetemployee_idrH   r>   employee_getappendis_superusercopysetlistr9   handle_bulk_submission)	rB   r=   rE   ifiltered_ids
request_idleave_requestformatted_idsrC   s	           r0   rZ   z,LeaveRequestsListView.handle_bulk_submission?   s0   ||++N;<?C0Q**3/++LO<L(4I1A8HAII& 	0J(0044
4CM((++w||/H/H/K/KK##J/	0 <<$$'L\*+||((*^];w-g66 Js   "E0E0c                     t         |          }|}t        | j                        }t	        | j                  |d      }|S )Nr&   )r9   get_querysetr   r=   r   )rB   querysetdatarC   s      r0   ra   z"LeaveRequestsListView.get_querysetT   s;    7')3DLLA!$,,6OPr/   
   Employeeleave_requests_custom_emp_col
Leave Typeleave_type_id
Start Date
start_dateEnd Dateend_dateRequested Daysrequested_dayszLeave Clashleave_clash_colStatuscustom_status_colCommentcomment_sidebar
Penalitiespenality_cola  
                {is_attendance_request_cancelled},
                hx-get='{leave_requests_detail_view}?instance_ids={ordered_ids}'
                hx-target="#genericModalBody"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                ))re   employee_id__get_full_nameemployee_id__get_avatar)rg   rh   )ri   rj   )rk   rl   )rm   rn   )rp   r8   confirmation_colactions_colza
                                style="width:200px !important;"
                                )rf   optionzrejected--dotRejecteda]  
            onclick="
            $('#applyFilter').closest('form').find('[name=status]').val('rejected');
            $('[name=canceled]').val('unknown').change();
            $('[name=approved]').val('unknown').change();
            $('[name=requested]').val('unknown').change();
            $('#applyFilter').click();
            "

            zcancelled--dot	Cancelleda^  
            onclick="
            $('#applyFilter').closest('form').find('[name=status]').val('cancelled');
            $('[name=rejected]').val('unknown').change();
            $('[name=approved]').val('unknown').change();
            $('[name=requested]').val('unknown').change();
            $('#applyFilter').click();
            "

            zapproved--dotApproveda]  
            onclick="
            $('#applyFilter').closest('form').find('[name=status]').val('approved');
            $('[name=rejected]').val('unknown').change();
            $('[name=canceled]').val('unknown').change();
            $('[name=requested]').val('unknown').change();
            $('#applyFilter').click();
            "

            zrequested--dot	Requesteda]  
            onclick="
            $('#applyFilter').closest('form').find('[name=status]').val('requested');
            $('[name=rejected]').val('unknown').change();
            $('[name=canceled]').val('unknown').change();
            $('[name=approved]').val('unknown').change();
            $('#applyFilter').click();
            "

            zIrejected-{status} cancelled-{status} requested-{status} approved-{status})r)   r*   r+   r,   r   r:   rZ   ra   r   filter_classr   modelrecords_per_page_columns	row_attrssortby_mappingaction_methodoption_methodheader_attrsrow_status_indicationsrow_status_class__classcell__rC   s   @r0   r2   r2   1   sJ   1 1 17* &LE	
:78	
</*	
<,'	
:
#	
	./	
=	,-	
8)*	
9()	
<.)
GIN 'M!M*$$	L jM		
 kN		
 jM		
 kN		
W9v 	T r/   r2   c                        e Zd ZdZdeddf fdZ ed      Z e       Z	dZ
dZd	Zd
 ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fgZ xZS ) LeaveRequestsNavViewz
    nav bar
    r3   r4   Nc                     t        |   di | t        d      | _        g d| _        t        d      ddt        d      dt        d       d	dt        d
      ddg| _        dt        d       d| _        y )Nr6   ))rh   rg   )r8   rp   )-employe_id__employee_work_info__department_id
Department)0employee_id__employee_work_info__job_position_idJob Position)+employee_id__employee_work_info__company_idCompanyzBulk Approvez
                    onclick="
                    bulkApproveLeaveRequests();
                    "
                    style="cursor: pointer;"
                )actionattrsExportz
                    data-toggle = "oh-modal-toggle"
                    data-target = "#genericModal"
                    hx-target="#genericModalBody"
                    hx-get ="zleave-requests-nav-exportz?"
                    style="cursor: pointer;"
                Deletez
                    onclick="
                    bulkDeleteLeaveRequests();
                    "
                    data-action ="delete"
                    style="cursor: pointer; color:red !important"
                z
             hx-get="zrequest-creationz"
             hx-target="#genericModalBody"
             data-target="#genericModal"
             data-toggle="oh-modal-toggle"
         r.   )	r9   r:   r
   r;   	search_inr   actionsr   create_attrsrA   s     r0   r:   zLeaveRequestsNavView.__init__   s    "6"!"23
 N+ H+ &&ABC D		 H+	)
@!"#567 8
r/   zLeave Requestszcbv/leave_requests/filter.htmlformz#listContainerrT   re   rh   rg   rj   ri   rl   rk   r8   rp   rn   rm   5employee_id__employee_work_info__reporting_manager_idzReporting Manager.employee_id__employee_work_info__department_idr   r   r   1employee_id__employee_work_info__employee_type_idzEmployement Typer   r   )r)   r*   r+   r,   r   r:   r   	nav_titler   filter_instancefilter_body_templatefilter_form_context_namesearch_swap_targetgroup_by_fieldsr   r   s   @r0   r   r      s    0 0 0d "#I(*O;%) 
*&	!L/*	q'	Qz]#	1X;	1-./C!"	
 
:1\?K	;Q~=NO	<a@R>ST	6)EOr/   r   c                   ,     e Zd ZdZdZdef fdZ xZS )LeaveRequestsExportNavz
    for bulk export
    z-cbv/leave_requests/leave_requests_export.htmlr3   c                     t         j                  j                         }t        }t	        |      }t        |   di |}||d<   ||d<   |S )z%
        get data for export
        )rb   export_formexport_filterr.   )r   rR   allr   r   r9   get_context_data)rB   r3   rc   r   r   contextrC   s         r0   r   z'LeaveRequestsExportNav.get_context_data  sS     ##''),*D9'*4V4!,#0 r/   )r)   r*   r+   r,   r-   r   r   r   r   s   @r0   r   r     s!     DM
 
 
r/   r   c            
            e Zd ZdZeZ ed      ZddddZ ed      df ed	      d
f ed      df ed      df ed      df ed      df ed      df ed      ddfgZ	dZ
 fdZ xZS )LeaveRequestsDetailViewz
    detail view of page
    Detailsleave_requests_detail_subtitle my_leave_request_detail_subtitlerw   )titlesubtitleavatarrg   rh   Daysrn   ri   rj   rk   rl   zCreated Daterequested_datez
Created By
created_byDescriptiondescriptionzView attachmentattachment_actionT"leave_requests_detail_view_actionsc                 2   t        |   d	i |}t        | j                        }| j                  j
                  r d}|j                  |t        d      ddf       | j                  j                  r d}|j                  |t        d      ddf       ||d<   |S )
N   zMultiple Approvalsmultiple_approval_actionT   zReason for Rejectionrejected_actionbodyr.   )	r9   r   listr   instancemultiple_approvalsinsertr   reject_reason)rB   r3   r   r   insert_indexrC   s        r0   r   z(LeaveRequestsDetailView.get_context_dataE  s    '*4V4DII==++LKK'(*DdK
 ==&&LKKq!78:KTR r/   )r)   r*   r+   r,   r   r   r   r   headerr   r   r   r   r   s   @r0   r   r   +  s     EiLE16+F 
</*	
6$%	
<,'	
:
#	
>	,-	
<,'	
=	=)	
	2D9	D 9M r/   r   leave.add_leaverequestc                   v     e Zd ZdZeZeZdZ e	d      Z
def fdZ fdZdedef fdZdedef fd	Z xZS )
LeaveRequestFormViewz
    form view
    z$cbv/leave_requests/form/inherit.htmlLeave Requestr4   c                     t         |          }| j                  j                  d      }| j                  j                  d      }|r|r||d<   ||d<   |S y y )Ntype_idemp_idrh   rT   )r9   get_initialr3   rS   )rB   initialrh   rT   rC   s       r0   r   z LeaveRequestFormView.get_initialf  sY    '%'	2kkooh/['4GO$%0GM"N )=r/   c                    t        |   di |}| j                  r| j                  j                  j                  }|ri|j
                  j                         }t        j                  j                  |j                  dd            }|| j                  j                  d   _        | j                  j                  j                  rt         j                  j#                  | j                  j                  j                        }|j$                  }|j&                  }| j)                  |       |r|j
                  j                         }t        j                  j                  |j                  dd            }||j                  dd      vr-|t        j                  j                  |j*                        z  }|| j                  j                  d   _        t-        | j                  | j                  d      | _        | j                  j                  j                  rt/        d	      | j(                  _        | j                  |d
<   d|d<   |S )Nrh   T)flat)id__inrG   r   rH   r   r   r   leaverequestr<   r.   )r9   r   r=   r>   rU   available_leaver   r    rR   filtervalues_listr   fieldsrb   r   pkr   rS   rh   rT   
form_classrH   r   r   verbose_name)	rB   r3   r   employeeavailable_leavesassigned_leave_typesr^   rh   rC   s	           r0   r   z%LeaveRequestFormView.get_context_datao  s   '*4V4<<||((55H#+#;#;#?#?#A '0'8'8'?'?+77d7S (@ ($ >R		  1:99  (0044		8J8J8M8M4NM)77M$00HOO]O3#+#;#;#?#?#A '0'8'8'?'?+77d7S (@ ($ !(<(H(Ht )I )  -#++22m6F6F2GH ) >R		  1:&LL$))%=
	 99  +,_+=DOO())+	r/   r   c                 2   | j                   j                  j                  rt        d      | j                  _        |j                         s>|j                  j                         }t        | j                  | j                  ||d      S t        | 5  |      S )Nr   )r   errors)r   r   r   r   r   r   is_validr   as_datar   r=   r-   r9   form_invalid)rB   r   r   rC   s      r0   r   z!LeaveRequestFormView.form_invalid  sw    99  +,_+=DOO(}}[[((*Fd00462R  w#D))r/   c                 D   | j                  | j                  j                  | j                  j                  | j                  j
                        }|j                         r|j
                  j                  r7|j                  d      }d}|r|j                          t        j                  | j                  t        d             t        j                  t              5  t        j                   | j                  j"                  j$                  |j&                  j(                  j*                  j,                  d|j&                   dd|j&                   dd	|j&                   dd
|j&                   dd|j&                   ddt/        d      d|j0                   z   	       d d d        n|j                  d      }d}|j2                  j4                  dk(  r|j&                  }|j2                  }t6        j8                  j;                  ||      }| j                  j"                  j$                  |_        |j                          |j>                  |j@                  kD  rM|j>                  |j@                  z
  }|j@                  |_!        d|_         |jD                  |z
  |_"        ||_#        n/|j@                  |j>                  z
  |_         |j>                  |_!        d|_$        |j                          |r*| j                  j"                  j$                  |_        |j                          tK        |j0                        rtK        |j0                        }g }	|d   D ]  }
|	jM                  |
j,                          t        j                  t              5  t        j                   | j                  j"                  j$                  |	d   ddddddd|j0                   	       d d d        tO        | j                  |d      }|jQ                          t        j                  | j                  t        d             t        j                  t              5  t        j                   | j                  j"                  j$                  |j&                  j(                  j*                  j,                  d|j&                   dd|j&                   dd |j&                   dd!|j&                   dd"|j&                   ddt/        d      d|j0                   z   	       d d d        tR        j8                  jU                         }tW        |      d#k(  rtY        d$      S | jY                  d$      S tZ        |   |      S # 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   yxY w)%Nr   F)commitTz%Leave request is updated successfullyzLeave request updated for .u+   تم تحديث طلب الإجازة لـ u    Urlaubsantrag aktualisiert für z&Solicitud de permiso actualizada para u$   Demande de congé mise à jour pour zpeople-circlezrequest-viewz?id=)	recipientverbverb_arverb_deverb_esverb_friconredirectno)rh   rT   r   approvedmanagersz)You have a new leave request to validate.u?   لديك طلب إجازة جديد يجب التحقق منه.z3Sie haben eine neue Urlaubsanfrage zur Validierung.z6Tiene una nueva solicitud de permiso que debe validar.u4   Vous avez une nouvelle demande de congé à valider.z/leave/request-view?id=r=   )typez"Leave request created successfullyzNew leave request created for u0   تم إنشاء طلب إجازة جديد لـ u"   Neuer Urlaubsantrag erstellt für z'Nueva solicitud de permiso creada para u(   Nouvelle demande de congé créée pour     )/r   r=   rI   FILESr   r   r   r   saver   successr   
contextlibsuppress	Exceptionr#   sendr>   rU   rT   employee_work_inforeporting_manager_idemployee_user_idr
   rH   rh   require_approvalr   rR   rS   r   rn   available_daysapproved_available_dayscarryforward_daysapproved_carryforward_daysr8   r"   rV   r!   startr   r   lenr   r9   
form_valid)rB   r   r^   r   rT   rh   r   leaveconditional_requestsr   managermail_threadleave_requestsrC   s                r0   r
  zLeaveRequestFormView.form_valid  s   LLt||11DII<N<N  
 ==?}} $			 7!&&($$a(O&P $,,Y7  LL--::&3&?&?&R&R&g&g&x&x#=m>W>W=XXY!Z&QR_RkRkQllm$n&F}G`G`Faab$c&L]MfMfLggh$i&J=KdKdJeef$g!0%,^%< $]%5%5$67&8  !%			 7 ..??4G"/";";K$1$?$?M&4&<&<&@&@&3 'A 'O 04||/@/@/M/MM,!&&($33o6T6TT)88-<<= 
 ,:: &= :;6+==E (9 DI@ ,::+::; (6
 *88 &= ,6M(#((*/3||/@/@/M/MM,!&&(/0@0@A/G),,0, $&';J'G FG$OOG,D,DEF'00; "KK $ 1 1 > >*21+%P(i(](`(^%4+B=CSCSBT)U
 #6m)#K  %%'$$a(L&M $,,Y7  LL--::&3&?&?&R&R&g&g&x&x#A-B[B[A\\]!^&VWdWpWpVqqr$s&HIbIbHccd$e&MmNgNgMhhi$j&N}OhOhNiij$k!0%,^%< $]%5%5$67&8 ".!5!5!9!9!;~&!+'++$$R((w!$''G x ( s'   #CU=AV	CV=V	VV)r)   r*   r+   r,   r   r   r   r   r-   r   new_display_titledictr   r   r   r   r   r
  r   r   s   @r0   r   r   Z  sf     E)J:M/*T (T* * *q(7 q(L q( q(r/   r   c                       e Zd ZdZd Zej                  D  cg c]  }|d   dvr| c}}  ed      dfgz   ZdZdZ	dZ
dZyc c}} w )	LeaveClashListViewz&
    list view of leave clash col
    c                 `   t        j                  |       }| j                  j                  d      }t        j
                  j                  |      }|j                  dk7  s|j                  dk7  r|j                  t        |j                  j                  j                        t        |j                  j                  j                        z  |j                  |j                        j                  |      j                  t        d      t        d      z        }|j!                         S )	Nr   rG   rejected	cancelled)r   )r   )start_date__lteend_date__gte)r8   )r   ra   r3   rS   r   rR   r8   r   r   rT   r   department_idjob_position_idrl   rj   excludedistinct)rB   rb   r   records       r0   ra   zLeaveClashListView.get_queryset  s    "//5[[__T"%%))R)0==J&&--;*FGMGYGYGlGlGzGz IOI[I[InInI~I~ %+OO"("3"3   	 B+.*1EEF    ""r/   r   )ro   ru   ry   zClased Due Toclashed_due_tor   N)r)   r*   r+   r,   ra   r2   r   r   r   r   bulk_select_optionr   ).0cols   00r0   r  r    so    #0 )00q6KK 	 O
.	/0	1G !Is   Ar  rg   rh   z
Minus Daysminus_leaveszDeducted FromCFDget_deduct_from_carry_forward)Dr,   rN   r   typingr   django.contribr   django.db.modelsr   django.httpr   django.shortcutsr   r   django.urlsr	   r
   r   django.utils.decoratorsr   django.utils.translationr   r   base.cbv.penaltyr   base.decoratorsr   base.filtersr   base.methodsr   r   base.modelsr   horilla_views.cbv_methodsr   horilla_views.generic.cbv.viewsr   r   r   r   r   leave.filtersr   leave.formsr   r   leave.methodsr   leave.modelsr   r   r    leave.threadingr!   leave.viewsr"   notifications.signalsr#   r(   r2   r   r   r   r   r  r   extendr.   r/   r0   <module>r;     s0      #  $ 6 6 6 4 6 , - & ? ' 4  - H : @ @ / 0 ( .z2#$=>ZPB B Q 3B .z2#$=>ZPNO N Q 3Nb .z2#$=>ZPL> L Q 3L^ .z2#$=>ZP\  Q 3( .z2#$=>ZP*1 * Q 3*Z .z2#$<=JOx(? x( P 3x(v .z2$. $ 3$N     	
</*	
<.)	
	 ?@r/   