
    si5b                        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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mZ ddlmZ ddlmZ ddl m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z.  eed       G d de             Z/ eed       G d de             Z0 eed       G d de0             Z1 G d de      Z2 G d de      Z3 G d d e      Z4 eed       G d! d"e             Z5y)#z7
This page is handled the cbv of my leave request page
    N)datetime)Any)messages)HttpResponse)render)resolvereversereverse_lazy)method_decorator)gettext_lazy)login_required)HorillaDetailedViewHorillaFormViewHorillaListViewHorillaNavViewTemplateView)UserLeaveRequestFilter)UserLeaveRequestCreationForm)calculate_requested_dayscompany_leave_dates_listholiday_dates_list)AvailableLeaveCompanyLeaveHolidayLeaveRequest	LeaveTypeleave_requested_dates)LeaveMailSendThread)notifydispatch)namec                   ,     e Zd ZdZdZdef fdZ xZS )MyLeaveRequestViewz(
    for my leave request page view
    z/cbv/my_leave_request/my_leave_request_home.htmlkwargsc                     t        |   di |}t        j                  j	                  | j
                  j                  j                        }||d<   |S )z
        context data
        employee_iduser_leaves )superget_context_datar   objectsfilterrequestuseremployee_get)selfr$   context
user_leave	__class__s       >/var/www/python-projects/worksol/leave/cbv/my_leave_request.pyr+   z#MyLeaveRequestView.get_context_data3   sV     '*4V4#++22))66 3 

 ",    )__name__
__module____qualname____doc__template_namer   r+   __classcell__r4   s   @r5   r#   r#   +   s!     FM	 	 	r6   r#   c                        e Zd ZdZdeddf fdZeZeZ	dZ
dZg dZd	Zd
Zg 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dZ xZS )MainParentListViewz)
    main parent class for list view
    r$   returnNc                 D    t        |   di | t        d      | _        y )Nuser-request-filterr)   )r*   __init__r	   
search_urlr1   r$   r4   s     r5   rC   zMainParentListView.__init__E   s     "6"!"78r6   
   deleteleavedata))
Leave Typeleave_type_customz
Start Date
start_datezEnd Dateend_dateRequested Daysrequested_days)Statuscustom_status_col)Commentcomment_actioncancel_confirmation_actionleave_actions))rH   leave_type_id__nameleave_type_id__get_avatarrJ   rL   rN   )rQ   statusz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();
            "

            zstatus-{status}a  
                {is_rejected},
                hx-get='{my_leave_request_detail_view}?instance_ids={ordered_ids}'
                hx-target="#genericModalBody"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                )r7   r8   r9   r:   r   rC   r   filter_classr   modelrecords_per_pageview_idcolumnsoption_methodaction_methodsortby_mapping_row_status_indicationsrow_status_class	row_attrsr<   r=   s   @r5   r?   r?   ?   s    9 9 9 *LEGG 1M#MN jM		
 kN		
 jM		
 kN		
W9t )Ir6   r?   c                   "     e Zd ZdZ fdZ xZS )MyLeaveRequestListViewz
    List view of the page
    c                     t         |          }| j                  j                  j                  }|j                  |      }|S )z 
        to filter data
        r&   )r*   get_querysetr.   r/   r0   r-   )r1   querysetemployeer4   s      r5   rm   z#MyLeaveRequestListView.get_queryset   s<     7')<<$$11??x?8r6   )r7   r8   r9   r:   rm   r<   r=   s   @r5   rk   rk      s     r6   rk   c                   P     e Zd ZdZdeddf fdZ ed      ZdZdZ	d	Z
g d
Z xZS )MyLeaveRequestNavViewz
    nav bar
    r$   r@   Nc                     t        |   di | t        d      | _        t	               | _        dddg| _        dt        d       d| _        y )	NrB   Deletea  
                    class="delete"
                    onclick="
                    myLeaveRequestBulkDelete();
                    "
                    data-action ="delete"
                    style="cursor: pointer; color:red !important"
                )actionattrsz
             hx-get="zleave-request-createz"
             hx-target="#genericModalBody"
             data-target="#genericModal"
             data-toggle="oh-modal-toggle"
         r)   )	r*   rC   r	   rD   r   filter_instanceactionsr
   create_attrsrE   s     r5   rC   zMyLeaveRequestNavView.__init__   sc    "6"!"7857 #

!"#9:; <
r6   zMy Leave requestsz cbv/my_leave_request/filter.htmlformz#listContainer))leave_type_idrH   )rY   rQ   )rP   rO   )r7   r8   r9   r:   r   rC   rf   	nav_titlefilter_body_templatefilter_form_context_namesearch_swap_targetgroup_by_fieldsr<   r=   s   @r5   rq   rq      sA      4 %&I=%)Or6   rq   c                   <    e Zd ZdZeZ ed      ZddddZg dZ	dZ
y	)
MyLeaveRequestDetailViewz
    detail view of page
    Detailsemployee_id__get_full_name my_leave_request_detail_subtitleemployee_id__get_avatar)titlesubtitleavatar))rH   rz   )DaysrP   rJ   rL   )rQ   get_status_display)Descriptiondescription)zReason for Rejectionrejected_actionT)zView attachmentattachment_actionTdetail_leave_actionsN)r7   r8   r9   r:   r   r_   rf   r   headerbodyrd   r)   r6   r5   r   r      s5     EiLE-6+F	D +Mr6   r   c                   R     e Zd ZdZeZeZdZ e	d      Z
 fdZdedef fdZ xZS )MyLeaveRequestFormz
    form view
    &cbv/my_leave_request/form/inherit.htmlzCreate Requestc                 `   t        |   di |}d| j                  _        | j                  j                  j
                  }|j                  j                         }t        j                  j                  |j                  dd            }|| j                  j                  d   _        || j                  j                  d   _        | j                  j                   j"                  rt$        j                  j'                  | j                  j                   j"                        }| j                  j                  j
                  |j(                  k(  r,|j*                  dk7  r| j-                  |j(                  |	       t/        d
      | j,                  _        | j                  |d<   d|d<   |S )Nmy_leave_requestrz   T)flat)id__inr'   idapproved)ro   instancezLeave Request Updatery   myleaverequestra   r)   )r*   r+   r.   r   r/   r0   available_leaveallr   r,   r-   values_listry   fieldsrn   initialr   pkr   getr'   rY   
form_classrf   verbose_name)r1   r$   r2   empavailable_leavesassigned_leave_typesleave_requestr4   s          r5   r+   z#MyLeaveRequestForm.get_context_data  s_   '*4V4(:%ll,,..224(0077#//d/K  8  
 6J		)225		'/99  (0044		8J8J8M8M4NM!!..-2K2KK!((J6*66    ,--C+DDOO())-	r6   ry   r@   c                    | j                   j                  j                  }|j                  }| j	                  | j                   j
                  | j                  j                  |      }|j                         r| j	                  | j                   j
                  | j                   j                  | j                  j                         |j                  j                  r"|j                  d      }|j                  }|j                  }|j                  }|j                  }|j                   }	| j                   j                  j                  }
t"        j$                  j'                  |
|	      }|j(                  |j*                  z   }t-        ||||      }t/        ||      }t0        j$                  j3                         }t5        |      }t6        j$                  j3                         }t9        ||      |	j:                  dk(  r@|	j<                  dk(  r1t?        tA        |z               tC        fd|D              }||z
  }nOd}|	j<                  dk(  r|D ]  }||v s|d	z  } ||z
  }|	j:                  dk(  rtC        fd
|D              }||z
  }||k  rD|j                          tE        jF                  | j                   tI        d             t}        d#      S |jK                  d tI        d             t}        d#      S tM        |jN                  d         tM        |      k(  r|j                         r	|j                  d      }d}|j                   jP                  dk(  r|jR                  }|j                   }t"        j$                  j'                  ||      }|jT                  |j(                  kD  rM|jT                  |j(                  z
  }|j(                  |_+        d|_        |j*                  |z
  |_        ||_,        n/|j(                  |jT                  z
  |_        |jT                  |_+        d|_-        |j                          |r| j                   j                  j                  |_.        |j                          tE        jF                  | j                   tI        d             t_        j`                  tb              5  te        jf                  | j                   j                  j                  |jR                  jh                  jj                  jl                  d|jR                   dd|jR                   dd|jR                   dd|jR                   dd|jR                   ddto        d      d|j                   z   	       d d d        tq        | j                   |d      }|js                          tu        |       }tw        tx        j$                  j{                  |!            d	k(  rt}        d"      S |j                  d       t}        d#      S tE        j~                  | j                   tI        d$             t}        d#      S t        |   |      S # 1 sw Y   xY w)%N)r   ro   )r   Fcommitr'   rz   yesc              3   &   K   | ]  }|v  
 y wNr)   .0requested_datetotal_leavess     r5   	<genexpr>z0MyLeaveRequestForm.form_valid.<locals>.<genexpr>Y  s      ,* ',6,   r      c              3   &   K   | ]  }|v  
 y wr   r)   r   r   company_leave_datess     r5   r   z0MyLeaveRequestForm.form_valid.<locals>.<genexpr>f  s      2 . +.AA2r   z"Leave request updated successfully3You dont have enough leave days to make the requestr'   Tnorz   r'   r   "Leave request created successfullyzNew leave request created for .u0   تم إنشاء طلب إجازة جديد لـ u   Neuer Urlaubsantrag für z
 erstellt.z'Nueva solicitud de permiso creada para u(   Nouvelle demande de congé créée pour people-circlerequest-view?id=	recipientverbverb_arverb_deverb_esverb_friconredirectr.   )typero   r&   z*<script>window.location.reload();</script>z#<script>location.reload();</script>zYou don't have permission)Br.   r/   r0   r   r   POSTry   r   is_validFILESr   saverK   rM   start_date_breakdownend_date_breakdownrz   r   r,   r   available_dayscarryforward_daysr   r   r   r   r   r   r   exclude_company_leaveexclude_holidaylistsetsumr   successrf   	add_errorintdatarequire_approvalr'   rP   approved_available_daysapproved_carryforward_daysrY   
created_by
contextlibsuppress	Exceptionr   sendemployee_work_inforeporting_manager_idemployee_user_idr	   r   startr   lenr   r-   r   errorr*   
form_valid)r1   ry   r   emp_idr   rK   rM   r   r   
leave_typero   r   available_total_leaverP   requested_datesholidaysholiday_datescompany_leavestotal_leave_countholiday_countr   company_leave_countr   r'   rz   leavemail_threadr   r   r4   s                              @@r5   r   zMyLeaveRequestForm.form_valid1  s   ll,,LL		(:(:S  
 ==?OO!!4<<#5#5		@R@R   }} $			 7*55
(11'4'I'I$%2%E%E"*88
<<,,99"0"8"8"<"< (
 #= # $22_5V5VV & ":*>@R" #8
H"M"??..0 28 <!-!5!5!9!9!;&>"J'# 44="22e;#'M<O,O(P#QL(+ ,.=, )% &46G%GN$%M!11U:.= 3N-> - 23 *8-)G!775@.1 22A2 /+ *8:M)M!%::!&&($$a(L&Mh   EFFa NNOP`   EFFW tyy/0CK?}}(,			(?#(66GG4O*7*C*CK,9,G,GM.<.D.D.H.H.; /I /O !. < <"1"@"@!A %2$@$@&5&D&D%E !&
 %4$B$B !. E BC >$3$E$E$M !0 A LQ H %4$B$B&3&B&B%C !0 >
 %2$@$@ !. E 4>M0+0027;||7H7H7U7UM4)..0$,, $ !"F G ",!4!4Y!? " &$(LL$5$5$B$B.;.G.G.Z.Z.o.o  /A  /A+I-JcJcIdde)f.^_l_x_x^yyz,{.GHaHaGbbl,m.UVcVoVoUppq,r.VWdWpWpVqqr,s)8-4^-D(,]-=-=,>&?.@!"" +> $m)+K (--/#?#MD #L$8$8$?$?F$?$S T#$!% (4$P(" !" !IIUI3+,QRRNN4<<3N1OP EFFw!$''A" "s   CY  Y))r7   r8   r9   r:   r   r   r   r_   r;   rf   new_display_titler+   r   r   r<   r=   s   @r5   r   r      sH     .JE<M*+JQ(; Q( Q( Q(r6   r   c                   f     e Zd ZdZeZeZ ed      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 )	MyLeaveRequestSingleFormz#
    single leave request form
    Leave Requestr   c                    t        |   di |}| j                  j                  j                  }t        | j                  j                        }|j                  j                  d      }t        j                  j                  |      }| j                  ||j                         d      }t        d      | j                  _        ||j                   d   _        ||d<   |S )	Nr   r   r   )r   r   rz   ry   r)   )r*   r+   r.   r/   r0   r   	path_infor$   r   r   r,   r-   r   firstrf   r   r   rn   )	r1   r$   r2   ro   resolvedleave_idr   ry   r4   s	           r5   r+   z)MyLeaveRequestSingleForm.get_context_data  s    '*4V4<<$$114<<112??&&w/&&---:
$,z?O?O?QR  
 ()'9$0:O$-r6   ry   r@   c                 <   | j                  | j                  j                        }t        d      | j                   _        |j                         s>|j                  j                         }t        | j                  | j                  ||d      S t        | -  |      S )Nr   )ry   errors)r   r.   r   rf   r   r   r  as_datar   r;   r*   form_invalid)r1   ry   r  r4   s      r5   r  z%MyLeaveRequestSingleForm.form_invalid  s|    t||001'('9$}}[[((*Fd00462R  w#D))r6   c                 r   | j                   j                  j                  }t        | j                   j                        }|j
                  j                  d      }t        j                  j                  |      }| j                  | j                   j                  | j                   j                  |      }t        j                  | j                   j                  j                  d      d      }t        j                  | j                   j                  j                  d      d      }| j                   j                  j                  d      }| j                   j                  j                  d      }	t        j                  j                  ||	      }
|
j                  |
j                   z   }t#        ||||	      }t%        ||      }|D cg c]  }|j'                          }}t(        j                  j+                         }t-        |      }t.        j                  j+                         }t1        ||      |j2                  d
k(  r@|j4                  d
k(  r1t7        t9        |z               t;        fd|D              }||z
  }nOd}|j4                  d
k(  r|D ]  }||v s|dz  } ||z
  }|j2                  d
k(  rt;        fd|D              }||z
  }t<        j                  j?                  |||      jA                  ddg      }|jC                         r|jE                  d tG        d             ns||k  s|jH                  jJ                  dvrU|jM                         r3|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                          t_        j`                  | j                   tG        d             tc        jd                  tf              5  ti        jj                  | j                   j                  j                  |jR                  jl                  jn                  jp                  ddddd d!ts        d"      d#|jt                   z   $	       tw        d%      cd d d        S |jE                  d tG        d)             tw        d%      S | j                  |      S t        |   |      S c c}w # 1 sw Y   nxY wty        t<        j                  j?                  |&            dk(  s5| j                   jz                  j                  d'      j}                  d(      stw        d%      S )*Nr   r   r   rK   z%Y-%m-%drM   r   r   r   r   c              3   &   K   | ]  }|v  
 y wr   r)   r   s     r5   r   z6MyLeaveRequestSingleForm.form_valid.<locals>.<genexpr>  s      $3A,.$r   r   r   c              3   &   K   | ]  }|v  
 y wr   r)   r   s     r5   r   z6MyLeaveRequestSingleForm.form_valid.<locals>.<genexpr>  s      *& #&99*r   )r'   start_date__lteend_date__gte	cancelledrejected)
status__inz4There is already a leave request for this date range)r   Fr   Tr   r   r   r   z)You have a new leave request to validate.u?   لديك طلب إجازة جديد يجب التحقق منه.z3Sie haben eine neue Urlaubsanfrage zur Validierung.z6Tiene una nueva solicitud de permiso que debe validar.u4   Vous avez une nouvelle demande de congé à valider.r   r   r   r   z)<script>window.location.reload()</script>r&   HTTP_REFERERzemployee-profile/r   )Br.   r/   r0   r   r   r$   r   r   r,   r   r   r   r   strptimer   r   r   r   r   dater   r   r   r   r   r   r   r   r   r   r   r-   excludeexistsr   rf   r   rY   r   r   rz   r'   r   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r   METAendswithr  r*   r   )r1   ry   ro   r  r  r   rK   rM   r   r   r   r   rP   r   r  r   r   r   r   r   r   r   overlapping_requestsr   r   r'   rz   r   r   r   r4   s                               @@r5   r   z#MyLeaveRequestSingleForm.form_valid  s   <<$$114<<112??&&w/&&**h*7
t||00$,,2D2DxX&&t||'8'8'<'<\'JJW
$$T\\%6%6%:%::%F
S#||00445KL!\\..223GH(0044 
 5 
 **_-N-NN 	 2"68J
 0
HE3BC4499;CC??&&(*84%--113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NO 448L8L U
 9
 }} $			 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,!&&($$a(L&M $,,Y7 Y LL--::&3&?&?&R&R&g&g&x&x!L$e$Y$\$Z!0%,^%< $]%5%5$67&8  ,,WXY Y* NNOP
 $$OPP((..w!$''W D\Y Y $,,333I"ll//33NCLL+  ,,WXXs   V<#BWW
)r7   r8   r9   r:   r   r_   r   r   rf   r   r;   r+   r   r   r  r   r<   r=   s   @r5   r   r     sY     E-J/*<M * * *(; ( ( (r6   r   )6r:   r   r   typingr   django.contribr   django.httpr   django.shortcutsr   django.urlsr   r	   r
   django.utils.decoratorsr   django.utils.translationr   rf   horilla_views.cbv_methodsr   horilla_views.generic.cbv.viewsr   r   r   r   r   leave.filtersr   leave.formsr   leave.methodsr   r   r   leave.modelsr   r   r   r   r   r   leave.threadingr   notifications.signalsr   r#   r?   rk   rq   r   r   r   r)   r6   r5   <module>r'     s      # $ # 6 6 4 6 4  1 4 
  0 ( .z2  3& .z2_ _ 3_D .z2/  3)N )X+2 +:G( G(T .z2c( c( 3c(r6   