
    siK                        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 dd
l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 ddlm Z  ddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)  ee d       G d de'             Z* ee d       G d de&             Z+d Z,e,e_,         ee d       G d de$             Z- ee d       G d de-             Z. ee d       G d de-             Z/ ee d       G d d e%             Z0 ee d       G d! d"e"             Z1 G d# d$e#      Z2 G d% d&e#      Z3 G d' d(e#      Z4y))z
Attendance requests
    N)Any)messages)HttpResponse)reverse)method_decorator)gettext_lazy)AttendanceFilters)AttendanceRequestFormBulkAttendanceRequestFormNewRequestForm)get_employee_last_name)
Attendance)choosesubordinatesfiltersubordinatesis_reportingmanager)Employee)login_required)HorillaDetailedViewHorillaFormViewHorillaListViewHorillaNavViewHorillaTabViewTemplateView)notifydispatch)namec                       e Zd ZdZdZy)AttendancesRequestViewz%
    for attendance request page
    z.cbv/attendance_request/attendance_request.htmlN)__name__
__module____qualname____doc__template_name     E/var/www/python-projects/worksol/attendance/cbv/attendance_request.pyr   r   $   s     EMr%   r   c                   ,     e Zd ZdZdeddf fdZ xZS )AttendancesRequestTabViewz,
    tabview of attendance request page
    kwargsreturnNc                     t        |   di | d| _        t        d      t	        d       dt        d      t	        d       dg| _        y )Nzattendance-containerzRequested Attendanceszattendance-request-list-tab)titleurlzAll Attendanceszattendance-list-tabr$   )super__init__view_id_r   tabsselfr)   	__class__s     r&   r/   z"AttendancesRequestTabView.__init__3   s[    "6"- 23!"?@A
 ,-!"789	
	r%   )r   r    r!   r"   r   r/   __classcell__r5   s   @r&   r(   r(   -   s     
 
 
 
r%   r(   c                 6    | j                   r| j                   S dS )z(
    Approve the attendance request
    -)approved_by)r4   s    r&   request_approved_byr;   B   s      $//48S8r%   c                   p    e Zd ZdZdeddf fdZeZe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 e
d      df e
d      df e
d      df e
d      d fgZg d!Zd" e
d#      d$fd% e
d&      d'fd( e
d)      d*fgZd+Z xZS ),AttendancesRequestListViewz
    list view
    r)   r*   Nc                 D    t        |   di | t        d      | _        y )Nattendance-request-tabr$   )r.   r/   r   
search_urlr3   s     r&   r/   z#AttendancesRequestListView.__init__R   s     "6"!":;r%   r   employee_idemployee_id__get_avatarDateattendance_dateDayattendance_dayCheck-Inattendance_clock_inIn Dateattendance_clock_in_date	Check-Outattendance_clock_outOut Dateattendance_clock_out_dateShiftshift_id	Work Typework_type_idMin Hourminimum_hourAt Workattendance_worked_hourOvertimeattendance_overtimeApproved Byr;   ))r   employee_id__get_full_namerB   )rC   rD   )rI   rJ   )rM   rN   )rU   rV   )rW   rX   zbulk-request--dotzBulk-Requestsa  
            onclick="
                $('#applyFilter').closest('form').find('[name=is_bulk_request]').val('true');
                $('[name=attendance_validated]').val('unknown').change();
                $('#applyFilter').click();
            "
            znot-validated--dotzNot Validateda  
            onclick="
                $('#applyFilter').closest('form').find('[name=attendance_validated]').val('false');
                $('[name=is_bulk_request]').val('unknown').change();
                $('#applyFilter').click();
            "
            zvalidated--dot	Validateda  
            onclick="
                $('#applyFilter').closest('form').find('[name=attendance_validated]').val('true');
                $('[name=is_bulk_request]').val('unknown').change();
                $('#applyFilter').click();

            "
            z validated-{attendance_validated})r   r    r!   r"   r   r/   r	   filter_classr   modelr1   columnssortby_mappingrow_status_indicationsrow_status_classr6   r7   s   @r&   r=   r=   L   s3   < < < %LE	
:'@A	
6%&	
5#$	
:-.	
912	
;/0	
:34	
7Z 	
;(	
:'	
9/0	
:-.	
=	01GN  o
	
 !o
	
 kN	
/#J :r%   r=   c                       e Zd ZdZdeddffdZdZej                  D  cg c]  }|d   dk7  s| c}} Zd	Z	d
Z
fdZxZS c c}} w )AttendanceRequestListTabz 
    Attendance request tab
    r)   r*   Nc                 2    t        |   di | d| _        y )Nzattendance-requests-containerr$   r.   r/   r0   r3   s     r&   r/   z!AttendanceRequestListTab.__init__   s    "6"6r%   z2cbv/attendance_request/attendance_request_tab.html   
status_colrequest_actionsa  
                id = "requestedattendanceTr{get_instance_id}"
                data-attendance-id="{get_instance_id}"
                data-toggle="oh-modal-toggle"
                data-target="#validateAttendanceRequest"
                hx-get = "{detail_view}?instance_ids={ordered_ids}"
                hx-trigger ="click"
                hx-target="#validateAttendanceRequestModalBody"
                c                     t         |          }|}|j                  d      }t        | j                  d|      }||j                  | j                  j
                  d      z  }|S )NT)is_validate_requestattendance.view_attendancerequestpermqueryset)employee_id__employee_user_idrj   )r.   get_querysetfilterr   rm   user)r4   ro   	self_datar5   s      r&   rq   z%AttendanceRequestListTab.get_queryset   sy    7')	?? $ # 
 &LL-

 i..*.,,*;*; $ / 
 
 r%   )r   r    r!   r"   r   r/   r#   r=   r^   action_method	row_attrsrq   r6   ).0colr5   s   00@r&   rc   rc      sh    7 7 7 IM 299SV|=SG &MI s
   AArc   c                   @     e Zd ZdZ fdZ ed      dddgZdZ xZS )AttendanceListTabz
    Attendance tab
    c                     t         |          }|}t        | j                  d|      }||j	                  | j                  j
                        z  }|j	                  d      }|S )Nrk   rl   )rp   T)employee_id__is_active)r.   rq   r   rm   rr   rs   )r4   ro   dataattendancesr5   s       r&   rq   zAttendanceListTab.get_queryset   st    7')(LL-

 *.,,*;*; "- "
 
 ??#' # 
 r%   Editcreate-outlinez
                class="oh-btn oh-btn--light-bkg w-100"
                data-toggle="oh-modal-toggle"
                data-target="#genericModal"
                hx-get="{change_attendance}"
                hx-target="#genericModalBody"

                actioniconattrsa^  
                {diff_cell}
                id = "allattendanceTr{get_instance_id}"
                hx-get='{attendance_detail_view}?instance_ids={ordered_ids}'
                hx-target="#genericModalBody"
                hx-trigger ="click"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                )	r   r    r!   r"   rq   r1   actionsrv   r6   r7   s   @r&   rz   rz      s1    $ i$	
GIr%   rz   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g d
Z xZS )AttendanceRequestNavz
    nav bar
    r)   r*   Nc                 2   t        |   di | t        d      | _        dt        d       d| _        | j
                  j                  j                  d      st        | j
                        r"t        d      ddt        d	      d
dg| _
        y d | _
        y )Nr?   z
                        data-toggle="oh-modal-toggle"
                        data-target="#genericModal"
                        hx-get="zrequest-new-attendancezP"
                        hx-target="#genericModalBody"
                        z!attendance.add_attendanceovertimezBulk Approvez
                        onclick="
                        reqAttendanceBulkApprove();
                        "
                        style="cursor: pointer;"
                    )r   r   zBulk Rejectz
                        onclick="reqAttendanceBulkReject();"
                        style="color:red !important"
                    r$   )r.   r/   r   r@   create_attrsrm   rs   has_permr   r1   r   r3   s     r&   r/   zAttendanceRequestNav.__init__   s    "6"!":;!! "))A!B C D <<%%/
 .  /  .DL&  DLr%   Attendancesz,cbv/attendances/attendances_filter_page.htmlformz#listContainer))rA   r   )rD   zAttendance Date)rJ   rI   )rN   rM   )employee_id__countryCountry)5employee_id__employee_work_info__reporting_manager_idzReporting Manager)rP   rO   )rR   rQ   )rT   z	 Min Hour).employee_id__employee_work_info__department_id
Department)0employee_id__employee_work_info__job_position_idzJob Position)1employee_id__employee_work_info__employee_type_idzEmployement Type)+employee_id__employee_work_info__company_idCompany)r   r    r!   r"   r   r/   r1   	nav_titlefilter_body_templater	   filter_instancefilter_form_context_namesearch_swap_targetgroup_by_fieldsr6   r7   s   @r&   r   r      sI            D - II')O%)Or%   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f ed      df ed      df ed      df ed      df ed      d d!fgZ	 ed"      d#d$d%gZ
y&)'AttendanceListTabDetailViewz
    Detail view of page
    DetailsrZ   attendances_detail_subtitlerB   )r,   subtitleavatarrC   rD   rE   rF   rG   rH   zCheck In DaterJ   rK   rL   zCheck Out DaterN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r;   
Activitiesattendance_detail_activity_colTr   r   a`  
                    onclick="event.stopPropagation();"
                    class="oh-btn oh-btn--info w-100"
                    data-toggle="oh-modal-toggle"
                    data-target="#genericModalEdit"
                    hx-get="{change_attendance}?all_attendance=true"
                    hx-target="#genericModalEditBody"

                r   N)r   r    r!   r"   r   r]   r1   r,   headerbodyr   r$   r%   r&   r   r   3  s     EiLE-1+F 
6%&	
5#$	
:-.	
?	78	
;/0	
	9:	
7Z 	
;(	
:'	
9/0	
:-.	
=	01	
<:DAD$ i$	
Gr%   r   c                   b     e Zd ZdZeZeZ ed      Z	de
ddf fdZ fdZdedef fd	Z xZS )
NewAttendanceRequestFormViewz2
    form view for create  attendance request
    New Attendance Requestr)   r*   Nc                 2    t        |   di | d| _        y NattendanceRequestr$   re   r3   s     r&   r/   z%NewAttendanceRequestFormView.__init__k      "6"*r%   c                    t        |   di |}t        | j                  | j                  d      | _        | j                  j
                  d   j                  t        j                  j                  | j                  j                        z  | j                  j
                  d   _        | j                  j                  j                  j                  | j                  j
                  d   _        | j                  j                  j                  d      r| j                  j                  j                  d      }t        j                  j                  |      | j                  j
                  d   _        || j                  j
                  d   _        | j                  j                   j"                  rt%        d      | j&                  _        |S )Nattendance.change_attendancerA   employee_user_idemp_ididUpdate Attendance Requestr$   )r.   get_context_datar   rm   r   fieldsro   r   objectsrr   rs   employee_getr   initialGETgetinstancepkr1   
form_classverbose_name)r4   r)   contextr   r5   s       r&   r   z-NewAttendanceRequestFormView.get_context_datao  s\   '*4V4&LL$))%C
	 48993C3C4

(X%%,,dll>O>O,P4Q		'0 37,,2C2C2P2P2S2S		'/<<)\\%%))(3F7?7G7G7N7N 8O 8DII]+4 7=DII]+399  +,-H+IDOO(r%   r   c                    |j                         rat        d      }|j                  |j                  j                          t	        j
                  | j                  |       | j                         S t        | %  |      S )NNew Attendance request created)
is_validr1   new_instancesaver   successrm   r   r.   
form_valid)r4   r   messager5   s      r&   r   z'NewAttendanceRequestFormView.form_valid  sh    ==?89G  ,!!&&(T\\73$$&&w!$''r%   )r   r    r!   r"   r   r   r   r]   r1   new_display_titler   r/   r   r   r   r6   r7   s   @r&   r   r   b  sP      JE23+ + +&(~ (, ( (r%   r   c                   ^     e Zd ZdZeZeZ ed      Z	 fdZ
dd fd
Zdedef fd	Z xZS )
BulkAttendanceRequestFormViewz7
    form view for create bulk  attendance request
    r   c                    t        |   di |}t        | j                  | j                  d      | _        | j                  j
                  d   j                  t        j                  j                  | j                  j                        z  | j                  j
                  d   _        | j                  j                  j                  j                  | j                  j
                  d   _        |S )Nr   rA   r   r$   )r.   r   r   rm   r   r   ro   r   r   rr   rs   r   r   r   r4   r)   r   r5   s      r&   r   z.BulkAttendanceRequestFormView.get_context_data  s    '*4V4&LL$))%C
	 48993C3C4

(X%%,,dll>O>O,P4Q		'0 37,,2C2C2P2P2S2S		'/r%   N)r   c                4   | j                          | j                  }| j                  j                  j	                  d      |j
                  _        | j                  j                  j	                  d      |j
                  _        |j                         ro|j
                  j                  rt        d      }nt        d      }|j                  d      }t        j                  | j                  |       | j                         S t        | @  |g|d|i|S )N	from_dateNew Attendance request updatedr   Fcommitr   )get_formr   rm   POSTr   r   rJ   rD   r   r   r1   r   r   r   r   r.   post)	r4   rm   r   argsr)   r   r   r   r5   s	           r&   r   z"BulkAttendanceRequestFormView.post  s    yy151B1B1F1F{1S.(,(9(9(=(=k(J%==?}}<=<=99E92T\\73$$&&w|G<d<r<V<<r%   r   r*   c                    | j                   j                  j                  d      |j                  _        | j                   j                  j                  d      |j                  _        |j                         ro|j                  j                  rt        d      }nt        d      }|j                  d      }t        j                  | j                   |       | j                         S t        | 9  |      S )Nr   r   r   Fr   )rm   r   r   r   rJ   rD   r   r   r1   r   r   r   r   r.   r   )r4   r   r   r   r5   s       r&   r   z(BulkAttendanceRequestFormView.form_valid  s    151B1B1F1F{1S.(,(9(9(=(=k(J%==?}}<=<=99E92T\\73$$&&w!$''r%   )r   r    r!   r"   r   r   r   r]   r1   r   r   r   r   r   r6   r7   s   @r&   r   r     sH     +JE23	 '+ =(8 (\ ( (r%   r   c                   R     e Zd ZdZeZeZdeddf fdZ	 fdZ
dedef fdZ xZS )	UpdateAttendanceRequestFormViewz1
    form view for update attendance request
    r)   r*   Nc                 2    t        |   di | d| _        y r   re   r3   s     r&   r/   z(UpdateAttendanceRequestFormView.__init__  r   r%   c                     t        |   di |}| j                  j                  j                  rt        d      | j                  _        |S )Nr   r$   )r.   r   r   r   r   r1   r   r   r   s      r&   r   z0UpdateAttendanceRequestFormView.get_context_data  s?    '*4V499  +,-H+IDOO(r%   r   c                 F   |j                         rt        j                  j                  | j                  j
                  j                        }|j                         }|j                  |_        |j                  |_	        |j                  dk7  rQt        j                  |j                               |_        |j                  |_        d|_        |j                          nd|_        d|_        |j                          t%        j&                  | j(                  t+        d             |j                  }|j                  j,                  j.                  r|j                  j,                  j.                  j0                  }t3        |      }t5        j6                  | j(                  j8                  ||j:                   d| d|j<                   dd	|j:                   d
| d|j<                   d|j:                   d| d|j<                   dd|j:                   d| d|j<                   d|j:                   d| d|j<                   dt?        d      d|j                   z   d	       | j(                  j@                  j                  d      }| j(                  j@                  j                  d      }|dk(  r#tC        d|j
                  j                   d      S |dk(  r#tC        d|j
                  j                   d      S | jC                         S tD        	|   |      S ) Nr   create_requestTFz"Attendance update request created. z:'s                          attendance update request for z is createdu4   تم إنشاء طلب تحديث الحضور لـ z                         u   في zKDie Anfrage zur Aktualisierung der Anwesenheit von                         u&                                für den z wurde erstelltu?   Se ha creado la solicitud de actualización de asistencia para z                          z el u+   La demande de mise à jour de présence de z	 pour le u    a été crééezrequest-attendance-viewz?id=zcheckmark-circle-outline)	recipientverbverb_arverb_deverb_esverb_frredirectr   detail_viewall_attendancetruez]<script>
                                            var reqModal = $('#requestedattendanceTra  ');
                                            reqModal[0].click();
                                            $('#genericModalEdit').removeClass('oh-modal--show');
                                            $('.reload-record').click();
                                            $('#reloadMessagesButton').click();
                                        </script>
                                    z]<script>
                                            var attendaceModal = $('#allattendanceTra  ');
                                            attendaceModal[0].click();
                                            $('#genericModalEdit').removeClass('oh-modal--show');
                                            $('.reload-record').click();
                                            $('#reloadMessagesButton').click();
                                        </script>
                                    )$r   r   r   r   r   r   r   r   rA   r   request_typejsondumps	serializerequested_datarequest_descriptionrj   is_validate_request_approvedr   r   rm   r1   employee_work_inforeporting_manager_idr   r   r   sendrs   employee_first_namerD   r   r   r   r.   r   )
r4   r   
attendancer   employeereporting_manageruser_last_namer   r   r5   s
            r&   r   z*UpdateAttendanceRequestFormView.form_valid  s   ==?#++//4993E3E3H3H/IJyy{H#-#9#9H $--HK&&*::,0JJx7I7I7K,L
)191M1M
.15
.!8=5/3,T\\1-Q+RS!--H%%88MM**==RRcc " "8
!CLL%%/$889>:J K99C9S9S8TT_aRS[SoSoRp q')z/I/I.JL!556a7G H&&0&@&@%AR ^^f^z^z]{ |)*$z/I/I.JLI(JfJfIg h)*)J4N4N3OO_a$%>?Z]]O,-3!$ ,,**..}=K!\\--112BCNf$#UUYUbUbUeUeTf g%(	 	  6)#UUYUbUbUeUeTf g%(	 	 $$&&w!$''r%   )r   r    r!   r"   r
   r   r   r]   r   r/   r   r   r   r6   r7   s   @r&   r   r     sI     'JE+ + +C(4 C( C( C(r%   r   )5r"   r   typingr   django.contribr   django.httpr   django.urlsr   django.utils.decoratorsr   django.utils.translationr   r1   attendance.filtersr	   attendance.formsr
   r   r   attendance.methods.utilsr   attendance.modelsr   base.methodsr   r   r   employee.modelsr   horilla_views.cbv_methodsr   horilla_views.generic.cbv.viewsr   r   r   r   r   r   notifications.signalsr   r   r(   r;   r=   rc   rz   r   r   r   r   r   r$   r%   r&   <module>r     s     # $  4 6 0 
 < ( T T $ 4  ) .z2E\ E 3E .z2
 
 3
(9 "5
  .z2G: G: 3G:T .z2)9 ) 3)X .z2,2 , 3,^ .z2;> ; 3;| .z2+"5 + 3+\'(? '(T.(O .(bU(o U(r%   