
    si!\                     l   d Z ddlZddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ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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/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA  ee9d       e e#d      d       G d deA                    ZB G d d e>      ZC ee9d       e e#d      d       G d! d"e@                    ZD ee9d       e e#d      d       G d# d$e?                    ZE ee9d       e e#d      d       G d% d&eA                    ZF ee9d       e e#d      d       G d' d(eC                    ZG ee9d       e e#d      d       G d) d*eC                    ZH ee9d       e e#d      d       G d+ d,eC                    ZI ee9d       e e#d      d       G d- d.e<                    ZJ ee9d       e e#d      d       G d/ d0eJ                    ZK ee9d       e e#d      d       G d1 d2eJ                    ZL ee9d       e e#d      d       G d3 d4eJ                    ZM ee9d       e e#d5      d       G d6 d7e=                    ZN ee9d       e e#d8      d       G d9 d:e=                    ZO ee9d       G d; d<e             ZP G d= d>e>      ZQ G d? d@eC      ZR G dA dBeJ      ZS e-j                  dC ej                         dDdEdFeQj                         dGdEgH       dI ZVe3j                  ZXdJ ZYdK edL      dMfdN edO      dPfgZZdQ Z[eYe3_W         e3       e0_\        eZe/_]        eZe1_^        e[e5_[        y)Rz<
this page is handling the cbv methods of  attendances page
    N)Any)messages)HttpResponse)render)resolvereversereverse_lazy)method_decorator)gettext_lazy)AttendanceActivityListView)AttendanceTabView)AttendanceFilters)AttendanceExportFormAttendanceFormAttendanceUpdateForm)
AttendanceAttendanceValidationConditionstrtime_seconds)manager_can_enter)PenaltyFilter)choosesubordinatesfiltersubordinatesis_reportingmanager)PenaltyAccounts)EmployeeProfileView)EmployeeCardEmployeeNavEmployeesList)EmployeeFilter)Employee)HorillaFilterSet)login_requiredrender_template)HorillaDetailedViewHorillaFormViewHorillaListViewHorillaNavViewHorillaTabViewTemplateViewdispatchnameattendance.view_attendancec                       e Zd ZdZdZy)AttendancesViewz
    for attendances page
    z)cbv/attendances/attendance_view_page.htmlN)__name__
__module____qualname____doc__template_name     >/var/www/python-projects/worksol/attendance/cbv/attendances.pyr/   r/   )   s     @Mr6   r/   c                   0    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"Z xZS )#AttendancesListViewz
    list view
    kwargsreturnNc                     t        |   di | t        d      | _        | j                  j
                  j                  d      st        | j                        rd| _        y y )Nzattendances-list-viewattendance.change_attendanceattendance_actionsr5   )	super__init__r   
search_urlrequestuserhas_permr   option_methodselfr:   	__class__s     r7   r@   zAttendancesListView.__init__8   sT    "6"!"9:<<%%*
 .!5D /r6   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Pending Hourhours_pendingOvertimeattendance_overtime))r    employee_id__get_full_namerJ   )rK   rL   )rM   attendance_day__day)rO   rP   )rQ   rR   )rS   rT   )rU   rV   )rW   shift_id__employee_shift)rY   work_type_id__work_type)r[   r\   )r]   r^   )r_   r`   )ra   rb   
   )r0   r1   r2   r3   r   r@   r   filter_classr   model_columnssortby_mappingrecords_per_page__classcell__rH   s   @r7   r9   r9   3   s    6 6 6 %LE	
:'@A	
6%&	
5#$	
:-.	
912	
;/0	
:34	
7Z 	
;(	
:'	
9/0	
>	O,	
:-.GN r6   r9   c                   ,     e Zd ZdZdeddf fdZ xZS )AttendancesTabViewz#
    tabview of candidate page
    r:   r;   Nc                     t        |   di | d| _        t        d      t	        d       dddgdt        d      t	        d	       d
ddgdt        d      t	        d       dg| _        y )Nzattendances-tabzAttendance To Validatevalidate-attendance-tabValidatez
                    onclick="
                    bulkValidateTabAttendance();
                    "
                    style="cursor: pointer;"
                actionattrs)titleurlactionsz OT Attendancesot-attendance-tabz
Approve OTz
                    onclick="
                    otBulkValidateTabAttendance();
                    "
                    style="cursor: pointer;"
                z Validated Attendancesvalidated-attendance-tab)rx   ry   r5   )r?   r@   view_idrj   r   tabsrF   s     r7   r@   zAttendancesTabView.__init__j   s    "6"( 34!";<= #-"
  ,-!"567 #/"
  34!"<=>?#
	r6   )r0   r1   r2   r3   r   r@   rn   ro   s   @r7   rq   rq   c   s     &
 &
 &
 &
r6   rq   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d ed      fd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 )AttendancesNavViewz
    nav bar
    r:   r;   Nc           	         t        |   di | t        d      | _        dt	        d      fdt	        d      fdt	        d      fdt	        d	      fd
t	        d      fdt	        d      fg| _        dt        d       d| _        t	        d      ddt	        d      dt        d       ddg}| j                  j                  j                  d      r|j                  t	        d      dd       || _        y )Nzattendances-tab-viewrN   rM   rX   rW   rZ   rY   .employee_id__employee_work_info__department_id
Department0employee_id__employee_work_info__job_position_idJob Position+employee_id__employee_work_info__company_idCompanyz
             hx-get="zattendance-createz"
             hx-target="#genericModalBody"
             data-target="#genericModal"
             data-toggle="oh-modal-toggle"
         Importa  
                    onclick="
                    importAttendanceNav();
                    "
                    data-toggle = "oh-modal-toggle"
                    data-target = "#attendanceImport
                    "
                    style="cursor: pointer;"
                ru   Exportz
                    data-toggle = "oh-modal-toggle"
                    data-target = "#genericModal"
                    hx-target="#genericModalBody"
                    hx-get ="zattendences-navbar-exportz?"
                    style="cursor: pointer;"
                attendance.add_attendanceDeletez
                        onclick="
                        bulkDeleteAttendanceNav();
                        "
                        data-action="delete"
                        style="cursor: pointer; color:red !important"
                    r5   )r?   r@   r   rA   rj   	search_inr	   create_attrsrB   rC   rD   appendrz   )rG   r:   rz   rH   s      r7   r@   zAttendancesNavView.__init__   s   "6"!"89qx(7$Q{^,=qOB.! ;AiLI

!"#678 9
 H+ H+ &&ABC D		
0 <<%%&ABNNk	 r6   Attendancesz,cbv/attendances/attendances_filter_page.htmlformz#listContainerrI   r    rL   zAttendance DaterX   rW   rY   rZ   r\   r[   )employee_id__countryCountry5employee_id__employee_work_info__reporting_manager_idzReporting Managerr   r   r   r   1employee_id__employee_work_info__employee_type_idzEmployement Typer   r   )r0   r1   r2   r3   r   r@   rj   	nav_titlefilter_body_templater   filter_instancefilter_form_context_namesearch_swap_targetgroup_by_fieldsrn   ro   s   @r7   r   r      s    9 9 9v - II')O%) 
*&	A/01	QwZ 	a'(	:'+C!"	
 
:1\?K	;Q~=NO? !	
 
7)E#Or6   r   c                   ,     e Zd ZdZdZdef fdZ xZS )AttendancesExportNavz
    for bulk export
    z,cbv/attendances/attendances_export_page.htmlr:   c                     t         j                  j                         }t        }t	        |      }t        |   di |}||d<   ||d<   |S )z%
        get data for export
        )querysetexport_formexportr5   )r   objectsallr   r   r?   get_context_data)rG   r:   attendancesr   r   contextrH   s         r7   r   z%AttendancesExportNav.get_context_data   sS    
 !((,,.*"K8'*4V4!,"r6   )r0   r1   r2   r3   r4   r   r   rn   ro   s   @r7   r   r      s!     CM  r6   r   c                   J     e Zd ZdZdeddf fdZ fdZdZdZd	Z	d
diZ
 xZS )ValidateAttendancesListz
    validate tab
    r:   r;   Nc                 D    t        |   di | t        d      | _        y )Nrs   r5   r?   r@   r   rA   rF   s     r7   r@   z ValidateAttendancesList.__init__  s     "6"!";<r6   c                 x    t         |          }|j                  dd      }t        | j                  |d      }|S )NFTattendance_validatedemployee_id__is_activer-   r?   get_querysetfilterr   rB   rG   r   rH   s     r7   r   z$ValidateAttendancesList.get_queryset  sG    7')??!&t # 
 &LL($@
 r6   validateselectedInstancesvalidate_buttonz
                hx-get='{validate_detail_view}?instance_ids={ordered_ids}'
                hx-target="#genericModalBody"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                rv   E
                    style="width:150px !important;"
                )r0   r1   r2   r3   r   r@   r   selected_instances_key_idaction_method	row_attrsheader_attrsrn   ro   s   @r7   r   r     sE    = = = !<%MI 	 Lr6   r   c                   F     e Zd ZdZdZdeddf fdZ fdZdZd	d
iZ	 xZ
S )OTAttendancesListz
    OT tab
    overtimeselectedInstancesr:   r;   Nc                 R    t        |   di | t        d      | _        d| _        y )Nr{   
ot_approver5   )r?   r@   r   rA   r   rF   s     r7   r@   zOTAttendancesList.__init__5  s(    "6"!"56)r6   c                     t         |          }t        d      }t        j                  j                         }|t        |j                        }|j                  dd      }t        | j                  |d      }|S )Nz00:30r   T)overtime_second__gtr   r-   )
r?   r   r   r   r   firstminimum_overtime_to_approver   r   rB   )rG   r   minot	conditionrH   s       r7   r   zOTAttendancesList.get_queryset:  s    7')()11779 	  #I$I$IJE?? !!% # 
 &LL($@
 r6   z
                hx-get='{ot_detail_view}?instance_ids={ordered_ids}'
                hx-target="#genericModalBody"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                rv   r   )r0   r1   r2   r3   r   r   r@   r   r   r   rn   ro   s   @r7   r   r   ,  s@     !<* * *
"I 	 Lr6   r   c                   >     e Zd ZdZdZdeddf fdZ fdZdZ xZ	S )	ValidatedAttendancesListz
    validated tab
    validatedselectedInstancesr:   r;   Nc                 D    t        |   di | t        d      | _        y )Nr|   r5   r   rF   s     r7   r@   z!ValidatedAttendancesList.__init__a  s     "6"!"<=r6   c                 x    t         |          }|j                  dd      }t        | j                  |d      }|S )NTr   r-   r   r   s     r7   r   z%ValidatedAttendancesList.get_querysete  sG    7')??!%d # 
 &LL($@
 r6   z
                hx-get='{validated_detail_view}?instance_ids={ordered_ids}'
                hx-target="#genericModalBody"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                )
r0   r1   r2   r3   r   r   r@   r   r   rn   ro   s   @r7   r   r   X  s/     !=> > >Ir6   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dfgZ	y )!GenericAttendancesDetailViewz%
    Generic Detail view of page
    Detailsrc   attendances_detail_subtitlerJ   )rx   subtitleavatarrK   rL   rM   rN   rO   rP   zCheck In DaterR   rS   rT   zCheck Out DaterV   rW   rX   rY   rZ   r[   r\   r]   r^   ra   rb   
Activitiesattendance_detail_activity_colTN)
r0   r1   r2   r3   r   ri   rj   rx   headerbodyr5   r6   r7   r   r   w  s     EiLE-1+F 
6%&	
5#$	
:-.	
?	78	
;/0	
	9:	
7Z 	
;(	
:'	
9/0	
:-.	
<:DADr6   r   c                       e Zd ZdZdZy)ValidateDetailView&
    detail view for validate tab
    validate_detail_actionsNr0   r1   r2   r3   r   r5   r6   r7   r   r     s     .Mr6   r   c                       e Zd ZdZdZy)OtDetailViewz 
    detail view for OT tab
    ot_detail_actionsNr   r5   r6   r7   r   r     s     (Mr6   r   c                       e Zd ZdZdZy)ValidatedDetailViewr   validated_detail_actionsNr   r5   r6   r7   r   r     s     /Mr6   r   r   c                   N     e Zd ZdZeZeZ ed      Z	 fdZ
dedef fdZ xZS )AttendancesFormViewz
    form view
    zAdd Attendancesc                     t        |   di |}t        | j                  | j                  d      | _        | j                  |d<   d|d<   |S )Nr   r   attendanceCreater}   r5   )r?   r   r   rB   r   rG   r:   r   rH   s      r7   r   z$AttendancesFormView.get_context_data  sO    '*4V4&LL$))%@
	 ))/	r6   r   r;   c                     |j                         rLt        d      }|j                          t        j                  | j
                  |       | j                  d      S t        | !  |      S )NzAttendance Added)<script>window.location.reload()</script>	is_validrj   saver   successrB   r   r?   
form_validrG   r   messagerH   s      r7   r   zAttendancesFormView.form_valid  sV    ==?*+GIIKT\\73$$%PQQw!$''r6   )r0   r1   r2   r3   r   
form_classr   ri   rj   new_display_titler   r   r   rn   ro   s   @r7   r   r     s=      JE+,	(~ (, ( (r6   r   zattendance.change__attendancec                   >     e Zd ZdZeZeZ fdZdede	f fdZ
 xZS )AttendanceUpdateFormViewz
    form for update
    c                     t        |   di |}| j                  j                  j                  rt        d      | j                  _        d|d<   |S )NzEdit AttendanceattendanceUpdater}   r5   )r?   r   r   instancepkrj   r   verbose_namer   s      r7   r   z)AttendanceUpdateFormView.get_context_data  sI    '*4V499  +,->+?DOO(/	r6   r   r;   c                     |j                         rFt        d      }|j                          t        j                  | j
                  |       t        d      S t        | !  |      S )NzAttandance Updatedr   r   r   s      r7   r   z#AttendanceUpdateFormView.form_valid  sP    ==?,-GIIKT\\73 KLLw!$''r6   )r0   r1   r2   r3   r   ri   r   r   r   r   r   rn   ro   s   @r7   r   r     s2     E%J(3 ( ( (r6   r   c                   >     e Zd ZdZdeddf fdZdZdZ fdZ xZ	S )AttendanceDetailActivityListz3
    List view for activity col in detail view
    r:   r;   Nc                     t        |   di | d | _        t        | j                  j
                        }d|j                  j                  d      i}t        d|      | _	        y )Nr   zget-attendance-activitiesr:   r5   )
r?   r@   r   r   rB   	path_infor:   getr   rA   )rG   r:   resolvedrH   s      r7   r@   z%AttendanceDetailActivityList.__init__  s[    "6"!4<<112(//%%d+
 ""=fMr6    c                     t         |          }t        j                  | j                  j                  d            }|j                  |j                  |j                        }|S )Nr   )rL   rI   )	r?   r   r   findr:   r   r   rL   rI   rG   r   r   rH   s      r7   r   z)AttendanceDetailActivityList.get_queryset  sT    7')__T[[__T23??..BNN # 
 r6   )
r0   r1   r2   r3   r   r@   bulk_select_optionr   r   rn   ro   s   @r7   r   r     s5    N N N I r6   r   c                        e Zd Z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gZ
 e	d      dddgZdZdeddf fdZ fdZ xZS )PenaltyAccountListViewz#
    list view for penalty tab
       z
Leave Typeleave_type_idz
Minus Daysminus_leaveszDeducted From CFDget_deduct_from_carry_forwardzPenalty amountpenalty_amountzCreated Date
created_atzPenalty Typepenalty_type_colr   ztrash-outlineaV  
                        class="oh-btn oh-btn--light-bkg w-100 text-danger"
                        hx-confirm="Are you sure you want to delete this penalty?"
                        hx-post="{get_delete_url}"
                        hx-target="#penaltyTr{get_delete_instance}"
                        hx-swap="delete"

                      )rv   iconrw   zG
                id = "penaltyTr{get_delete_instance}"
                r:   r;   Nc                     t        |   di | | j                  j                  j                  j                  d      }t        dd|i      | _        y )Nr   zindividual-panlty-list-viewr   r5   )r?   r@   rB   resolver_matchr:   r   r   rA   rG   r:   r   rH   s      r7   r@   zPenaltyAccountListView.__init__/  sF    "6"\\((//33D9!"?r
Sr6   c                 ~    t         |          }| j                  j                  d      }|j	                  |      }|S )Nr   rI   )r?   r   r:   r   r   r   s      r7   r   z#PenaltyAccountListView.get_queryset4  s7    7')[[__T"??r?2r6   )r0   r1   r2   r3   r   rh   r   ri   rm   rj   rk   rz   r   r   r@   r   rn   ro   s   @r7   r  r    s     !LE	
</*	
<.)	
	!@A	
	./	
>	L)	
>	./G k#	
GIT T T
 r6   r  c                   >     e Zd ZdZ fdZdZdeddf fdZdZ xZ	S )	$ValidateAttendancesIndividualTabViewz4
    list view for validate attendance tab view
    c                     t         |          }| j                  j                  d      }|j	                  |dd      }t        | j                  |d      |z  }|S )Nr   FT)rI   r   r   r-   )r?   r   r:   r   r   r   rB   r   s      r7   r   z1ValidateAttendancesIndividualTabView.get_queryset@  se    7')[[__T"??!&#' # 
 t||X7ST 	 r6   r   r:   r;   Nc                 :   t        |   di | | j                  j                  j                  j                  d      }t        dd|i      | _        | j                  j                  j                  d      st        | j                        rd| _        d| _        y )Nr   z"validate-attendance-individual-tabr   r=   r   zvalidate-containerr5   )r?   r@   rB   r  r:   r   r   rA   rC   rD   r   r   r}   r  s      r7   r@   z-ValidateAttendancesIndividualTabView.__init__P  s    "6"\\((//33D9!0$
 <<%%*
 .!2D+r6   z
                hx-get='{individual_validate_detail_view}?instance_ids={ordered_ids}'
                hx-target="#genericModalBody"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
                )
r0   r1   r2   r3   r   r   r   r@   r   rn   ro   s   @r7   r  r  ;  s/     !<
, 
, 
,Ir6   r  c                   J     e Zd ZdZdZ fdZ eed       fd       Z xZ	S )'ValidateAttendancesIndividualDetailViewz=
    Validate tab detail view in single view of employee
    r   c                 &   t         |          }| j                  j                  d      }|j                  |      }|j                  }t        | j                        rJt        | j                  |d      |j                  | j                  j                  j                        z  }|S | j                  j                  j                  d      r|j                  |      }|S |j                  | j                  j                  j                        }|S )Nr   )r   r-   r  )r?   r   r:   r   rI   r   rB   r   r   rC   employee_getrD   )rG   r   r   objrI   rH   s        r7   r   z4ValidateAttendancesIndividualDetailView.get_querysetk  s    7')[[__T"llbl!oot||,)h(DDLL,=,=,J,JKLH 	 \\''(DE;?H   4<<3D3D3Q3QRHr6   r*   r+   c                 *    t        t        | 
  |i |S )N)r?   r   r*   )rG   argsr:   rH   s      r7   r*   z0ValidateAttendancesIndividualDetailView.dispatchz  s    14A4R6RRr6   )
r0   r1   r2   r3   r   r   r
   r"   r*   rn   ro   s   @r7   r  r  d  s1     .M n:6S 7Sr6   r  r   z5attendance.cbv.accessibility.attendance_accessibility)rx   viewaccessibilityzPenalty Accountz2attendance.cbv.accessibility.penalty_accessibility)r~   c                 F   t         j                   j                         j                         }|t        j                  d      z
  }t        j
                  j                  ||d      j                  dd      }|r| j                  |      } | S | j                  |      } | S )N   )daysT)attendance_date__gteattendance_date__lte!attendance_clock_out_date__isnullrI   )flat)id__in)	datetimenowdate	timedeltar   r   r   values_listexclude)r   _namevaluetoday	yesterdayworking_employeess         r7   get_working_todayr1    s    !!#((*E**22I"**11&"*. 2  k-dk+	  ??*;?< O ##+<#=Or6   c                 8   t        | g|i | t        j                  dt              }|| j                  d<   |j
                  | j                  j                  d<   | j                  j                  d   j                  j                  j                  ddi       y )NWorking)labelmethodworking_todayclasszoh-select oh-select-2 w-100)og_initdjango_filtersBooleanFilterr1  filtersfieldr   fieldswidgetrw   update)rG   r  r:   custom_fields       r7   online_initrA    s    D"4"6"!// 1L %1DLL!(4(:(:DII_%II_%,,22992	
r6   zoffline--dotOfflinez
            onclick="
                $('#applyFilter').closest('form').find('[name=working_today]').val('false');
                $('#applyFilter').click();
            "
            zonline--dotOnlinez
            onclick="$('#applyFilter').closest('form').find('[name=working_today]').val('true');
                $('#applyFilter').click();
            "
            c                      t        dd| i      S )z9
    This method for get custome coloumn for rating.
    z&cbv/employees_view/offline_online.htmlr   )pathr   )r#   )rG   s    r7   offline_onlinerF    s    
 5T" r6   )_r3   r&  typingr   r9  django.contribr   django.httpr   django.shortcutsr   django.urlsr   r   r	   django.utils.decoratorsr
   django.utils.translationr   rj   "attendance.cbv.attendance_activityr   attendance.cbv.attendance_tabr   attendance.filtersr   attendance.formsr   r   r   attendance.modelsr   r   r   base.decoratorsr   base.filtersr   base.methodsr   r   r   base.modelsr   employee.cbv.employee_profiler   employee.cbv.employeesr   r   r   employee.filtersr   employee.modelsr    horilla.filtersr!   horilla_views.cbv_methodsr"   r#   horilla_views.generic.cbv.viewsr$   r%   r&   r'   r(   r)   r/   r9   rq   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  add_tabas_viewr1  r@   r8  rA  status_indicationsrF  r   card_status_indicationsrow_status_indicationsr5   r6   r7   <module>rc     s      # $ # 6 6 4 6 I ; 0 W W X X - & T T ' = K K + $ , E  .z2#$@A
S@l @ T 3@-/ -` .z2#$@A
S+
 +
 T 3+
\ .z2#$@A
SX X T 3Xv .z2#$@A
S<  T 3* .z2#$@A
S 1   T 3 F .z2#$@A
S'+ ' T 3'T .z2#$@A
S2  T 3: .z2#$@A
S#6  T 3: .z2#$@A
S.5 . T 3. .z2#$@A
S(/ ( T 3( .z2#$@A
S/6 / T 3/ .z2#$?@zR(/ ( S 3(: .z2#$CD:V( ( W 3(4 .z2#=  36-_ -`&+> &RS.J S6     "-%--/T		
 '*224Q	

"" 
!
!  		)		 		(	 . & ,. '9 $'9 $( r6   