
    si]+                     D   d 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 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mZmZmZ ddl m!Z! ddl"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(  ee#d       e e$d      d       G d de(                    Z) ee#d       e e$d      d       G d de&                    Z* ee#d       e e$d      d       G d de'                    Z+ ee#d       e e$d      d       G d de'                    Z,y )!z5
This page handles the cbv methods for Biometric app
    )Any)logger)BackgroundScheduler)messages)HttpResponse)reverse)method_decorator)gettext_lazy)ZK)BiometricDeviceFilter)BiometricDeviceFormBiometricDeviceSchedulerForm)BiometricDevices)$anviz_biometric_attendance_scheduler$cosec_biometric_attendance_schedulerstr_time_seconds!zk_biometric_attendance_scheduler)BIO_DEVICE_THREADS)login_requiredpermission_required)HorillaCardViewHorillaFormViewHorillaNavViewdispatch)namezbiometric.view_biometricdevices)permc                   V     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 xZS )
BiometricNavBarz
    nav bar of the page
    kwargsreturnNc                 l    t        |   di | t        d      | _        dt        d       d| _        y )Nbiometric-card-viewz
                            data-toggle="oh-modal-toggle"
                            data-target="#genericModal"
                            hx-target="#genericModalBody"
                            hx-get="zbiometric-device-addz"
                             )super__init__r   
search_urlcreate_attrsselfr   	__class__s     ;/var/www/python-projects/worksol/biometric/cbv/biometric.pyr%   zBiometricNavBar.__init__+   sC    "6"!"78!% &--C%D$E F	     zBiometric Deviceszcbv/biometric_filter.htmlformz#listContainer)__name__
__module____qualname____doc__r   r%   _	nav_titlefilter_body_templater   filter_instancefilter_form_context_namesearch_swap_target__classcell__r*   s   @r+   r   r   "   sB    
	  	  	  %&I6+-O%)r,   r   c                        e Zd ZdZeZeZdeddf fdZ	dddZ
d	Zd
 ed      dfd ed      dfd ed      dfgZ xZS )BiometricCardViewz
    card view of the page
    r   r    Nc                 j    t        |   d	i | t        d      | _        dddddddddg| _        y )
Nr"   Edita  
                    class="oh-dropdown__link"
                    hx-get="{get_update_url}"
                    hx-target="#genericModalBody"
                    data-toggle="oh-modal-toggle"
                    data-target="#genericModal"
                    )actionattrsarchive_statusz
                    hx-confirm="Do you want to {archive_status} this device?"
                    hx-post="{get_archive_url}"
                    class="oh-dropdown__link"
                    hx-target="#listContainer"
                    Deletea  
                    hx-confirm="Do you want to delete this device?"
                    hx-post="{get_delete_url}"
                    class="oh-dropdown__link oh-dropdown__link--danger"
                    hx-target="#biometricDeviceList"
                    r#   )r$   r%   r   r&   actionsr(   s     r+   r%   zBiometricCardView.__init__I   sV    "6"!"78 !	 + #)
r,   z{name}zt Device Type : {get_machine_type} <br> {get_card_details} <br> {render_live_capture_html} <br> {render_actions_html})titlesubtitlez-is_scheduler-{is_scheduler} is_live-{is_live}znotconnected--dotzNot-Connectedz
            onclick="
                $('#applyFilter').closest('form').find('[name=hired]').val('false');
                $('#applyFilter').click();
            "
            zsheduled--dotSheduledz
            onclick="$('#applyFilter').closest('form').find('[name=is_scheduler]').val('true');
                $('#applyFilter').click();
            "
            z	live--dotzLive Capturez
            onclick="$('#applyFilter').closest('form').find('[name=is_live]').val('true');
                $('#applyFilter').click();
            "
            )r.   r/   r0   r1   r   modelr   filter_classr   r%   detailscard_status_classr2   card_status_indicationsr8   r9   s   @r+   r;   r;   =   s    
 E(L 
  
  
F  KG
 H  o		
 jM	
 n	
)r,   r;   zbiometric.add_biometricdevicesc                   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 )BiometricFormViewz;
    from view for create and update biometric devices
    zcbv/biometric_form.htmlzAdd Biometric Devicec                     t        |   di |}| j                  j                  j                  rt        d      | j                  _        | j                  |d<   |S )NzEdit Biometric Devicesr-   r#   )r$   get_context_datar-   instancepkr2   
form_classverbose_name)r)   r   contextr*   s      r+   rN   z"BiometricFormView.get_context_data   sL    '*4V499  +,-E+FDOO())r,   r-   r    c                    |j                         rm|j                  j                  rt        d      }nt        d      }|j	                          t        j                  | j                  |       | j                         S t        | )  |      S )N&Biometric device updated successfully.z$Biometric device added successfully.)is_validrO   rP   r2   saver   successrequestr   r$   
form_valid)r)   r-   messager*   s      r+   rZ   zBiometricFormView.form_valid   sk    ==?}}DEBCIIKT\\73$$&&w!$''r,   )r.   r/   r0   r1   r   rF   r   rQ   template_namer2   new_display_titlerN   r   rZ   r8   r9   s   @r+   rL   rL      sC    
 E$J-M01
(2 
(| 
( 
(r,   rL   z!biometric.change_biometricdevicesc                   >     e Zd ZdZeZeZ fdZdede	f fdZ
 xZS )BiometricSheduleFormz0
    form view for shedule biometric device
    c                 f   t        |   di |}| j                  j                  j                  rt        d      | j                  _        t        j                  j                  | j                  j                  j                        }|j                  | j                  j                  d   _        |S )NzSchedule Biometric Device..idscheduler_durationr#   )r$   rN   r-   rO   rP   r2   rR   r   objectsgetrc   fieldsinitial)r)   r   rS   devicer*   s       r+   rN   z%BiometricSheduleForm.get_context_data   s    '*4V499  %&'D%EDII"%--11TYY5G5G5J5J1KF=C=V=VDII12:r,   r-   r    c                 :   |j                         rA|j                  j                  rt        d      }t        j
                  j                  | j                  j                  j                        j                  dk(  r%	 j                  }j                  }d }t        ||dddd      }|j                         }|j                  d       | j                  j                  j                  d	      }t        j
                  j                  | j                  j                  j                        |_        d
_        d_        j'                          t)               }|j+                  fddt-        j                                |j/                          t1        d      S j                  dk(  r| j                  j                  j                  d	      }d
_        |_        j'                          t)               }|j+                  fddt-        j                                |j/                          t1        d      S | j                  j                  j                  d	      }d
_        d_        |_        j'                          t)               }t9        j                  j:                        }|r!|j=                          t8        j:                  = |j+                  fddt-        j                                |j/                          t1        d      S |j'                          t?        j@                  | j                         tB        |   |      S # t2        $ r-}	t5        j6                  d|	       d}
t1        |
      cY d }	~	S d }	~	ww xY w)NrU   ra   zk   r   F)porttimeoutpassword	force_udp
ommit_ping)indexrc   Tc                  .    t         j                        S N)r   rb   rh   s   r+   <lambda>z1BiometricSheduleForm.form_valid.<locals>.<lambda>   s    $Efii$P r,   interval)secondsz)<script>window.location.reload()</script>z,An error comes in biometric_device_schedule a  
                        <script>
                            Swal.fire({
                            title : "Schedule Attendance unsuccessful",
                            text: "Please double-check the accuracy of the provided IP Address and Port Number for correctness",
                            icon: "warning",
                            showConfirmButton: false,
                            timer: 3500,
                            timerProgressBar: true,
                            didClose: () => {
                                location.reload();
                                },
                            });
                        </script>
                        anvizc                  .    t         j                        S rs   )r   rb   rt   s   r+   ru   z1BiometricSheduleForm.form_valid.<locals>.<lambda>	       DVYY O r,   c                  .    t         j                        S rs   )r   rb   rt   s   r+   ru   z1BiometricSheduleForm.form_valid.<locals>.<lambda>  rz   r,   )#rV   rO   rP   r2   r   rd   re   r-   machine_typerl   
machine_ipr   connect
test_voicerY   POSTrc   is_scheduleris_liverW   r   add_jobr   startr   	Exceptionr   errorr   rb   stopr   rX   r$   rZ   )r)   r-   r[   port_nor}   conn	zk_deviceduration	schedulerr   scriptexisting_threadrh   r*   s               @r+   rZ   zBiometricSheduleForm.form_valid   s   ==?}}DE)11559K9K9N9N5O&&$./4"(++%+%6%6
#$&&!($%%&&+',%	  )002a0#'<<#4#4#8#89M#N!1!9!9!=!=ASASAVAV!=!W4<1.2+).$7$9	!))P&$4V5N5N$O * 
 ")+,WXX* ((G3#||00445IJH*.F'08F-KKM 3 5I%%O" 01J1J K & 
 OO%'(STT#||00445IJH*.F'%*FN08F-KKM 3 5I&8&<&<VYY&GO&',,..vyy9%%O" 01J1J K & 
 OO%'(STT IIKT\\73w!$''s % 4JE"  ,F33'4s   D#M$ $	N-"NNN)r.   r/   r0   r1   r   rF   r   rQ   rN   r   rZ   r8   r9   s   @r+   r_   r_      s6    
 E-J\(; \( \( \(r,   r_   N)-r1   typingr   venvr   !apscheduler.schedulers.backgroundr   django.contribr   django.httpr   django.urlsr   django.utils.decoratorsr	   django.utils.translationr
   r2   rj   r   biometric.filtersr   biometric.formsr   r   biometric.modelsr   biometric.viewsr   r   r   r   horilla.horilla_settingsr   horilla_views.cbv_methodsr   r   horilla_views.generic.cbv.viewsr   r   r   r   r;   rL   r_   r#   r,   r+   <module>r      s;     A # $  4 6  3 M -  8 I  .z2>?j*n * 3*. .z2>?jN N 3Nb .z2=>Z( ( 3(> .z2@A
n(? n( 3n(r,   