
    si~]                        d 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 ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZ ddlmZmZm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3  ee)d       G d de1             Z4 ee)d       G d de.             Z5 ee)d       G d de5             Z6 ee)d       G d de5             Z7 ee)d       G d d e/             Z8 ee)d       G d! d"e0             Z9 ee)d       G d# d$e1             Z: ee)d       G d% d&e,             Z; ee)d       G d' d(e;             Z< G d) d*e-      Z= ee)d       e e*d+,      d       G d- d.e=                    Z> ee)d       G d/ d0e-             Z? ee)d       G d1 d2e-             Z@ ee)d       G d3 d4e-             ZAy)5z>
This page is handling the cbv methods of shift request page.
    N)Any)forms)messages)Q)HttpResponse)render)reversereverse_lazy)method_decorator)gettext_lazy)ShiftRequestFilter)EmployeeShiftFormShiftAllocationFormShiftRequestColumnFormShiftRequestForm)choosesubordinatesfiltersubordinatesis_reportingmanager)EmployeeShiftShiftRequest)include_employee_instance)Employee)login_requiredpermission_required)HorillaDetailedViewHorillaFormViewHorillaListViewHorillaNavViewHorillaTabViewTemplateView)notifydispatch)namec                       e Zd ZdZdZy)ShiftRequestViewz
    Shift request page
    z$cbv/shift_request/shift_request.htmlN)__name__
__module____qualname____doc__template_name     :/var/www/python-projects/worksol/base/cbv/shift_request.pyr%   r%   (   s     ;Mr,   r%   c                   `    e Zd ZdZeZeZdZdZ	d e
d      dfd e
d      d	fd
 e
d      dfgZy)	ShiftListz
    List view
    zGapproved-{approved} canceled-{canceled} requested-{approved}-{canceled}   zcanceled--dotCanceleda0  
            onclick="
                $('#applyFilter').closest('form').find('[name=canceled]').val('true');
                $('[name=approved]').val('unknown').change();
                $('[name=requested]').val('unknown').change();
                $('#applyFilter').click();
            "
            zapproved--dotApproveda0  
            onclick="
                $('#applyFilter').closest('form').find('[name=approved]').val('true');
                $('[name=canceled]').val('unknown').change();
                $('[name=requested]').val('unknown').change();
                $('#applyFilter').click();
            "
            zrequested--dot	Requesteda0  
            onclick="
                $('#applyFilter').closest('form').find('[name=requested]').val('true');
                $('[name=approved]').val('unknown').change();
                $('[name=canceled]').val('unknown').change();
                $('#applyFilter').click();
            "
            N)r&   r'   r(   r)   r   modelr   filter_classrow_status_classrecords_per_page_row_status_indicationsr+   r,   r-   r/   r/   1   sp     E%L 	R   jM	
 jM	
 kN	
3%r,   r/   c            	            e Zd ZdZdZdZdeddf fdZ fdZ e	d	      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diZdZg dZdZ xZS )ShiftRequestListz&
    List view for shift requests
    shiftselectedInstancesz%cbv/shift_request/extended_shift.htmlkwargsreturnNc                     t        |   di | t        d      | _        d| _        | j
                  j                  j                  d      st        | j
                        rd| _	        y d | _	        y )Nlist-shift-requestzshift-containerbase.change_shiftrequestconfirmationsr+   )
super__init__r	   
search_urlview_idrequestuserhas_permr   action_methodselfr=   	__class__s     r-   rD   zShiftRequestList.__init__p   s^    "6"!"67(<<%%&
 .!0D!%Dr,   c                 N   t         |          }|}| j                  j                  j	                  d      sn| j                  j                  j
                  }t        | j                  |j                  d      d      }||j                  |      z  }|j                  d      }|S )Nbase.view_shiftrequestTreallocate_to__isnullbase.add_shiftrequestemployee_id)employee_id__is_active)rC   get_querysetrG   rH   rI   employee_getr   filter)rL   querysetdataemployeerM   s       r-   rV   zShiftRequestList.get_queryset|   s    7')||  ))*BC||((55H)d;'H
  $++(+"CCHdCHr,   r   rT   employee_id__get_avatarRequested Shiftshift_idPrevious/Current Shiftprevious_shift_idRequested Daterequested_dateRequested Tillrequested_tillDescriptiondescriptionCommentcommentoptionzI
                    style="width:190px !important;"
                    shift_actions)r   employee_id__get_full_namer]   shift_id__employee_shiftr_   !previous_shift_id__employee_shiftra   rb   rc   rd   z
                hx-get='{shift_details}?instance_ids={ordered_ids}'
                hx-target="#genericModalBody"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                )r&   r'   r(   r)   selected_instances_key_idr*   r   rD   rV   r8   columnsheader_attrsoption_methodsortby_mapping	row_attrs__classcell__rM   s   @r-   r;   r;   g   s     !9;M
& 
& 
&  
:'@A	
	z*	
#	$&9:	
	./	
	./	
=	=)	
9y!G 	 L $MNIr,   r;   c                        e Zd ZdZdZdeddf fdZ ed      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	dZ
 fdZdZg dZ xZS )AllocatedShiftz
    Allocated tab class
    allocatedselectedInstancesr=   r>   Nc                 D    t        |   di | t        d      | _        y )Nallocated-shift-viewr+   )rC   rD   r	   rE   rK   s     r-   rD   zAllocatedShift.__init__   s     "6"!"89r,   r   rT   r\   Allocated Employeereallocate_toUser Availabilityuser_availabilityr]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   allocated_confirm_action_colallocate_confirmationsc                 ~   t         |          }|}| j                  j                  j                  }t        | j                  |j                  d      d      }|j                  d      }| j                  j                  j                  d      s(|j                  t        |      t        |      z        }||z  }|S )NFrP   rR   rO   )r   rS   )	rC   rV   rG   rH   rW   r   rX   rI   r   )rL   rY   br[   allocated_requestsrM   s        r-   rV   zAllocatedShift.get_queryset   s    7')<<$$11%LLOO%O8#

 XXEXB||  ))*BC!3!:!:)A(,CC" 00r,   z
                hx-get='{allocate_shift_details}?instance_ids={ordered_ids}'
                hx-target="#genericModalBody"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                )rk   )r   reallocate_to__get_full_namerm   ro   rq   rr   )r&   r'   r(   r)   rs   r   rD   r8   rt   rJ   rv   rV   rx   rw   ry   rz   s   @r-   r|   r|      s     !=: : :
 
:'@A	
	 /2	
	!45	
	z*	
#	$&9:	
	./	
	./	
=	=)	
9y!
G 3M,M$INr,   r|   c                        e Zd ZdZdeddf fdZ ed      ZdZ e	       Z
dZd	Zd
 ed      fd ed      fd ed      fd ed      fgZ xZS )ShitRequestNavz
    Nav bar
    r=   r>   Nc                 ,   t        |   di | t        d      | _        dt	        d       d| _        g | _        | j                  j                  j                  d      st        | j                        rN| j                  j                  t        d      dd       | j                  j                  t        d	      d
d       | j                  j                  j                  d      st        | j                        r'| j                  j                  t        d      dd       | j                  j                  j                  d      st        | j                        r6| j                  j                  dt        d      dt        d       dd       y y )Nzshift-request-tabz
             hx-get="zshift-requestz"
             data-toggle="oh-modal-toggle"
             data-target="#genericModal"
             hx-target="#genericModalBody"

         rA   zApprove Requestsz
                    onclick="
                    shiftRequestApprove();
                    "
                    style="cursor: pointer;"
                    )actionattrszReject Requestsz
                    onclick="
                    shiftRequestReject();
                    "
                    style="cursor: pointer;"
                    zbase.delete_shiftrequestDeletez
                    onclick="
                    shiftRequestDelete();
                    "
                    data-action ="delete"
                    style="cursor: pointer; color:red !important"
                    rO   r   Exportz
                    data-toggle="oh-modal-toggle"
                    data-target="#genericModal"
                    hx-get="zshift-exportzu"
                    hx-target="#genericModalBody"
                    style="cursor: pointer;"
                    r+   )rC   rD   r	   rE   r
   create_attrsactionsrG   rH   rI   r   appendr8   insertrK   s     r-   rD   zShitRequestNav.__init__   sw   "6"!"56!"?34 5
 <<%%&
 .LL 23
 LL 12
 <<%%&
 .LLk	 <<%%&>?CVLLD
 LLk" %^45 6	D
r,   Shift Requestszcbv/shift_request/filter.htmlformz#listContainerrT   r   r^   r]   r`   zCurrent Shiftrb   ra   )r&   r'   r(   r)   r   rD   r8   	nav_titlefilter_body_templater   filter_instancefilter_form_context_namesearch_swap_targetgroup_by_fieldsry   rz   s   @r-   r   r      s    C C CJ "#I:(*O%) 
*&	Q()*	a01	1-./	Or,   r   c                   ,     e Zd ZdZdeddf fdZ xZS )ShiftRequestTabz
    Tab View
    r=   r>   Nc                     t        |   di | d| _        t        d      t	        d       dt        d      t	        d       dg| _        y )Nz	shift-tabr   r@   )titleurlzAllocated Shift Requestsr   r+   )rC   rD   rF   r8   r	   tabsrK   s     r-   rD   zShiftRequestTab.__init__H  s[    "6"" +,!"678
 56!"89:	
	r,   )r&   r'   r(   r)   r   rD   ry   rz   s   @r-   r   r   B  s     
 
 
 
r,   r   c                   ,     e Zd ZdZdZdef fdZ xZS )
ExportViewz
    For candidate export
    z#cbv/shift_request/export_shift.htmlr=   c                     t        |   di |}t        j                  j	                         }t
        }t        |      }||d<   ||d<   |S )N)rY   export_fieldsexport_filterr+   )rC   get_context_datar   objectsallr   r   )rL   r=   contextshift_requestsr   r   rM   s         r-   r   zExportView.get_context_data_  sQ    '*4V4%--113.*NC#0 #0 r,   )r&   r'   r(   r)   r*   r   r   ry   rz   s   @r-   r   r   W  s      :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gZ	de
ddf fdZ xZS )ShiftRequestDetailviewz
    Detail View
    Detailsrl   details_subtitler\   )r   subtitleavatarr]   r^   Previous Shiftr`   ra   rb   rc   rd   re   rf   zIs permenent shiftis_permanentr=   r>   Nc                     t        |   di | | j                  j                  j	                  d      rd| _        y d| _        y )N	dashboardrB   detail_actionsr+   )rC   rD   rG   GETgetrJ   rK   s     r-   rD   zShiftRequestDetailview.__init__  s;    "6"<<,!0D!1Dr,   )r&   r'   r(   r)   r   r4   r8   r   headerbodyr   rD   ry   rz   s   @r-   r   r   i  s     EiLE .&+F 
	z*	
	12	
	./	
	./	
=	=)	
	 .1D2 2 2 2r,   r   c            	           e Zd 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gZy)AllocatedShiftDetailViewz
    Allocated detail View
    r   r   r   r   r]   r^   r   r`   ra   rb   rc   rd   re   rf   N)r&   r'   r(   r)   r8   r   r+   r,   r-   r   r     su    
 
	 /2	
	!45	
	z*	
	12	
	./	
	./	
=	=)Dr,   r   c                   <     e Zd ZdZeZeZdZdZ	dede
f fdZ xZS )ShiftTypeFormViewz
    form view
    zCreate ShiftTr   r>   c                     |j                         rL|j                          t        d      }t        j                  | j
                  |       | j                  d      S t        | !  |      S )NShift Createdz*<script>window.location.reload():</script>)	is_validsaver8   r   successrG   r   rC   
form_validrL   r   messagerM   s      r-   r   zShiftTypeFormView.form_valid  sU    ==?IIK(GT\\73$$%QRRw!$''r,   )r&   r'   r(   r)   r   r4   r   
form_classnew_display_titleis_dynamic_create_viewr   r   ry   rz   s   @r-   r   r     s9     E"J&!(0 (\ ( (r,   r   zbase.add_employeeshift)permc                   2     e Zd ZdZ fdZdedefdZ xZS )ShiftTypeCreateFormViewFc                    t        |   di |}| j                  j                  j                  r@| j                  | j                  j                         t        d      | j
                  _        | j                  |d<   |S )NinstancezUpdate Shiftr   r+   )rC   r   r   r   pkr   r8   verbose_name)rL   r=   r   rM   s      r-   r   z(ShiftTypeCreateFormView.get_context_data  sc    '*4V499  OOTYY%7%7O8+,^+<DOO())r,   r   r>   c                    |j                         rw| j                  j                  j                  rt	        d      }nt	        d      }|j                          t        j                  | j                  |       | j                         S y )NzShift Updatedr   )
r   r   r   r   r8   r   r   r   rG   r   )rL   r   r   s      r-   r   z"ShiftTypeCreateFormView.form_valid  sc    ==?yy!!$$O,O,IIKT\\73$$&& r,   )	r&   r'   r(   r   r   r   r   r   ry   rz   s   @r-   r   r     s$     #'0 '\ 'r,   r   c                   p     e Zd ZdZeZeZ ed      Z	dZ
defgZ fdZdedef fdZdedef fd	Z xZS )
ShiftRequestFormView
    Form View
    zCreate Shift Request)cbv/shift_request/shift_request_form.htmlr^   c                 v   t        |   di |}| j                  j                  j                  j
                  }| j                  j                  j                  r&| j                  | j                  j                         t        | j                  | j                  d      | _        t        | j                  | j                        | _        | j                  j                  j                  rt        d      | j                  _        | j                  j                  j                  d      ra| j                  j                  j                  d      }t         j"                  j%                  |      | j                  j&                  d   _        || j                  j&                  d   _        | j                  |d<   |S )	Nr   rR   Update Requestemp_ididrT   r   r+   )rC   r   rG   rH   rW   r   r   r   r   r   r   r   r8   r   r   r   r   r   rX   fieldsrY   initialrL   r=   r   r[   rM   s       r-   r   z%ShiftRequestFormView.get_context_data  sC   '*4V4<<$$114499  OOTYY%7%7O8&LLII#
	
 .dllDIIF	99  +,-=+>DOO(<<)||''++H5H7?7G7G7N7N 8O 8DII]+4 3;		'/))r,   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   r8   r   r   r   r   as_datar   rG   r*   rC   form_invalidrL   r   r   rM   s      r-   r   z!ShiftRequestFormView.form_invalid  sx    99  +,-=+>DOO(}}[[((*Fd00462R  w#D))r,   c                    |j                         rJ|j                  j                  rt        d      }|j	                          n|j	                         }t        d      }t        j                  t              5  t        j                  |j                  |j                  j                  j                  j                  d|j                   d|j                   d|j                   dd|j                   d|j                   d	t        d
      d|j                   z   	       d d d        t!        j"                  | j$                  |       | j'                         S t(        | U  |      S # 1 sw Y   HxY w)N"Shift request updated Successfully Shift request added SuccessfullyzFYou have new shift request to approve                             for uC   لديك طلب وردية جديد للموافقة عليه لـ uF   Sie müssen eine neue Schichtanfrage                             für z genehmigenzQTiene una nueva solicitud de turno para                             aprobar para u`   Vous avez une nouvelle demande de quart de                            travail à approuver pour informationshift-request-view?id=	recipientverbverb_arverb_deverb_esverb_friconredirect)r   r   r   r8   r   
contextlibsuppress	Exceptionr!   sendrT   employee_work_inforeporting_manager_idemployee_user_idr	   r   r   r   rG   r   rC   r   )rL   r   r   r   rM   s       r-   r   zShiftRequestFormView.form_valid  sV   ==?}}@A		99;>?((3 KK ,,$00CCXXii !!)!5!5 68"efnfzfze{ |#""*"6"6!7{!D#**2*>*>)?!A#77?7K7K6L!N*!()=!>4}AU!U$ T\\73$$&&w!$'') s   9B,E,,E5)r&   r'   r(   r)   r   r4   r   r   r8   r   r*   r   dynamic_create_fieldsr   r   r   r   r   ry   rz   s   @r-   r   r     se     E!J01?M(*;<=,* * *(/ (L ( (r,   r   c                   V     e Zd ZdZeZeZdZ fdZ	de
def fdZdedef fdZ xZS )ShiftRequestFormDuplicatez
    Duplicate form view
    r   c                 "   t        |   di |}t        j                  j	                  | j
                  d         }| j                  |      | _        | j                  j                  j                         D ]  \  }}t        |t        j                        s!|j                  r|j                  }n)| j                  j                  j	                  |d       d}|| j                  j                  |<   || j                  j                  |   _         t        | j                  | j                  d      | _        t!        | j                  | j                        | _        | j                  j"                  j	                  d      ra| j                  j"                  j	                  d      }t$        j                  j'                  |      | j                  j                  d   _        | j                  |d	<   t+        d
      | j                  _        |S )Nr   r   r    z (copy)rR   r   rT   r   	Duplicater+   )rC   r   r   r   r   r=   r   r   r   items
isinstancer   	CharFieldr   r   rG   r   r   r   rX   rY   r8   r   )	rL   r=   r   original_object
field_namefieldinitial_valuer[   rM   s	           r-   r   z*ShiftRequestFormDuplicate.get_context_data  s   '*4V4&..22dkk$6G2HOO_O=	!%!1!1!7!7!9 	EJ%1==$)MMM'+yy'8'8'<'<Z'L&MW$UM0=		!!*-7D		  ,4	E 'LLII#
	
 .dllDIIF	<<)||''++H5H7?7G7G7N7N 8O 8DII]+4 ))'(~$r,   r   r>   c                     t        d      | j                  _        |j                         s>|j                  j                         }t        | j                  | j                  ||d      S t        | )  |      S )Nr  r   )r8   r   r   r   r   r   r   rG   r*   rC   r   r   s      r-   r   z&ShiftRequestFormDuplicate.form_invalid8  sc    '(~$}}[[((*Fd00462R  w#D))r,   c                 $   | j                  | j                  j                        }|j                         rL|j	                          t        d      }t        j                  | j                  |       | j                  d      S t        | )  |      S )Nr   *<script>window.location.reload();</script>)r   rG   POSTr   r   r8   r   r   r   rC   r   r   s      r-   r   z$ShiftRequestFormDuplicate.form_validB  sn    t||001==?IIK:;GT\\73$$%QRRw!$''r,   )r&   r'   r(   r)   r   r4   r   r   r*   r   r   r   r   r   ry   rz   s   @r-   r   r     sJ     E!J?M6* * *(/ (L ( (r,   r   c                   b     e Zd ZdZeZeZ ed      Z	 fdZ
dedef fdZdedef fdZ xZS )ShiftAllocationFormViewr   zShift Requestc                 "   t        |   di |}| j                  j                  j                  r&| j                  | j                  j                         t        | j                  | j                  d      | _        t        | j                  | j                        | _        | j                  j                  j                  rt        d      | j
                  _
        | j                  j                  j                  d      r| j                  j                  j                  d      }|| j                  j                  d   _        t        j                   j#                  |      | j                  j                  d   _        | j                  |d<   |S )	Nr   rR   r   r   rT   r   r   r+   )rC   r   r   r   r   r   r   rG   r   r8   r   r   r   r   r   r   r   rX   rY   r   s       r-   r   z(ShiftAllocationFormView.get_context_dataV  s(   '*4V499  OOTYY%7%7O8&LLII#
	
 .dllDIIF	99  +,-=+>DOO(<<)||''++H5H6>DII]+37?7G7G7N7N 8O 8DII]+4 ))r,   r   r>   c                 2   | j                   j                  j                  rt        d      | j                  _        |j                         s>|j                  j                         }t        | j                  | j                  ||d      S t        | 5  |      S r   r   r   s      r-   r   z$ShiftAllocationFormView.form_invalidk  sz     99  +,-=+>DOO(}}[[((*Fd00462R  w#D))r,   c                 d   |j                         r|j                  j                  rt        d      }|j	                          n|j	                         }t        d      }|j
                  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|j                    z   	       t        j                  |j                  |j                  d|j                   dd|j                   dd|j                   dd|j                   dd|j                   dd
t        d      d|j                    z   	       d d d        t#        j$                  | j&                  |       | j)                  d      S t*        | Y  |      S # 1 sw Y   IxY w)Nr   r   r   z9You have a new shift reallocation request to approve for .uh   لديك طلب تخصيص جديد للورديات يتعين عليك الموافقة عليه لـ uW   Sie haben eine neue Anfrage zur Verschiebung der Schichtzuteilung zur Genehmigung für uH   Tienes una nueva solicitud de reasignación de turnos para aprobar para uL   Vous avez une nouvelle demande de réaffectation de shift à approuver pour r   r   r   r   z/You have a new shift reallocation request from u:   لديك طلب تخصيص جديد للورديات من zFSie haben eine neue Anfrage zur Verschiebung der Schichtzuteilung von u9   Tienes una nueva solicitud de reasignación de turnos de u=   Vous avez une nouvelle demande de réaffectation de shift de r  )r   r   r   r8   r   cleaned_datar   r   r   r!   r   rT   r   r   r   r	   r   r   r   rG   r   rC   r   )rL   r   r   r   reallocate_emprM   s        r-   r   z"ShiftAllocationFormView.form_validw  sa   ==?}}@A		99;>?!%!2!2?!C((3 KK11 MM55HH]]nnXYaYmYmXnnop #K  LT  L`  L`  Ka  ab  !c"y  {C  {O  {O  zP  PQ  !R"jkskk  kA  AB  !C"now  pD  pD  oE  EF  !G*!()=!>4}AU!U KK ,,#1#B#BNxOcOcNddef"\]e]q]q\rrs t"hiqi}i}h~~  !A"[\d\p\p[qqr s"_`h`t`t_uuv w*!()=!>4}AU!U
4 T\\73$$%QRRw!$''9 s   	EH&&H/)r&   r'   r(   r)   r   r4   r   r   r8   r   r   r   r   r   r   r   ry   rz   s   @r-   r  r  L  sP     E$J/**
* 
* 
*%(/ %(L %( %(r,   r  )Br)   r   typingr   djangor   django.contribr   django.db.modelsr   django.httpr   django.shortcutsr   django.urlsr	   r
   django.utils.decoratorsr   django.utils.translationr   r8   base.filtersr   
base.formsr   r   r   r   base.methodsr   r   r   base.modelsr   r   
base.viewsr   employee.modelsr   horilla_views.cbv_methodsr   r   horilla_views.generic.cbv.viewsr   r   r   r   r   r    notifications.signalsr!   r%   r/   r;   r|   r   r   r   r   r   r   r   r   r   r  r+   r,   r-   <module>r)     sN      #  $ # - 4 6 +  U T 3 0 $ I  ) .z2;| ; 3; .z22 2 32j .z2Ay A 3AH .z29Y 9 39x .z2U^ U 3Up .z2
n 
 3
( .z2  3" .z220 2 32@ .z25  3 ( (& .z2%+CD:V'/ ' W 3'0 .z2G(? G( 3G(T .z25( 5( 35(p .z2O(o O( 3O(r,   