B
    b2                 @   s  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 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 d dlm Z  d dl!m"Z" G dd deZ#G dd deZ$e%eG dd dej&Z'dS )    N)cache)settings)Http404)Q)gettext_lazy)admin)EASYWDMS)get_software_type_without_load)SimpleListFilter)Terminal)TerminalCreationFormTerminalChangeForm)actions)fieldswidgets)ActionTuple)	getDevicec               @   s(   e Zd ZedZdZdd Zdd ZdS )SupportAccessFilterZterminal_field_support_accesssupport_accessc             C   s   dt dfdt dffS )N0Znot_support_access1r   )_)selfrequestmodel_admin r   ;G:\easytimepro\master/mysite/iclock\admin\terminal_admin.pylookups   s    
zSupportAccessFilter.lookupsc             C   sN   t jj|jjd}|  dkr.|jdd}|S |  dkrJ|jdd}|S d S )N)
company_idr   r   )	lock_funcr   )r   objectsfilterusercurrent_companyvalueZexclude)r   r   querysetZ	terminalsr   r   r   r%   #   s    zSupportAccessFilter.querysetN)__name__
__module____qualname__r   titleparameter_namer   r%   r   r   r   r   r      s   r   c               @   s(   e Zd ZedZdZdd Zdd ZdS )StateListFilterZterminal_field_stateterminal_statec             C   s@   ddl m} |jtdf|jtdf|jtdf|jtdffS )Nr   )constZterminal_state_unauthorizedterminal_state_onlineZterminal_state_communicationterminal_state_offline)mysite.iclockr-   TERMINAL_DISABLEr   TERMINAL_NORMALZTERMINAL_COMMUNICATIONTERMINAL_OFFLINE)r   r   r   r-   r   r   r   r   2   s
    zStateListFilter.lookupsc       	      C   s   ddl m} |  }g }g }|d k	rt|}x>|D ]6}| }|jjrT||j q2||kr2||j q2W ||j	krz|}|j
|d}|S )Nr   )r-   )Zpk__in)r0   r-   r$   intgetDynStatearea
is_defaultappendpkr1   r!   )	r   r   qsr-   Zfilter_valueZpk_listZ_pk_listobjstater   r   r   r%   ;   s     

zStateListFilter.querysetN)r&   r'   r(   r   r)   r*   r   r%   r   r   r   r   r+   -   s   	r+   c                   s  e Zd Zdd Zede_dd Zede_dd Zd	d
 Zdd Z	dd Z
dd Zede_ede_ede	_ede
_dZdZejsdZdZeefZdddiiZdZdZdZdeiZeZeZejejfZe edej!ej"ej#fe ed ej$ej%ej&fe ed!ej'ej(ej)ej*ej+ej,ej-ej.ffZ/e0j1d"e2j3iiZ4d7d%d&Z5d'd( Z6d8 fd)d*	Z7d+d, Z8ed-e8_d.d/ Z9ed0e9_d1d2 Z:d9 fd3d4	Z; fd5d6Z<  Z=S ):TerminalAdminc             C   s   ddl m} ddlm} ddlm} | }d}|jjrZ||j	krZd}|j
ddd	i  }n<|jjr||jkrd}|j
d
ddi  }n|j
d
d|i  }|d|||S )Nr   )r   )format_html)r-    zIDefault area device the data will not transfer between system and device.zimg/icons/state%(state)s.pngr<      zimg/icons/state%(state)s.gif   z`<div title="{}" style="padding: 0 5px;"><img width="10" height="10px" src="{}" alt="{}" /></div>)django.confr   Zdjango.utils.htmlr>   r0   r-   r5   r6   r7   r3   Z	MEDIA_URLr2   )r   r;   r   r>   r-   r<   ZaltZicon_urlr   r   r   r,   P   s    zTerminalAdmin.terminal_stater,   c             C   s   t dj|jd|j}|S )Nz{sn}_last_activity)sn)r   getformatrC   last_activity)r   r;   rF   r   r   r   terminal_last_activityd   s    z$TerminalAdmin.terminal_last_activityZterminal_field_lastActivityc             C   s   |j S )N)	cmd_count)r   r;   r   r   r   rH   j   s    zTerminalAdmin.cmd_countc             C   s"   t |j}t|dr|jS dS d S )NUserCardCountr?   )r   rC   hasattrrI   )r   r;   devr   r   r   user_card_countm   s    

zTerminalAdmin.user_card_countc             C   s"   t |j}t|dr|jS dS d S )NUserPhotoCountr?   )r   rC   rJ   rM   )r   r;   rK   r   r   r   user_photo_countt   s    

zTerminalAdmin.user_photo_countc             C   s"   t |j}t|dr|jS dS d S )NATTPhotoCountr?   )r   rC   rJ   rO   )r   r;   rK   r   r   r   att_photo_count{   s    

zTerminalAdmin.att_photo_countc             C   s.   t | j}| }|dkr"tdS tdS d S )N)         r.   r/   )r   rC   r5   r   )r   Zdevicer<   r   r   r   device_state   s
    
zTerminalAdmin.device_stateZterminal_field_cmdCountZterminal_field_CardCountZterminal_field_userPhotoCountZterminal_field_attPhotoCount)rC   aliasarea__area_codearea__area_name
user_countfp_count
face_count
palm_counttransaction_countrF   	push_time	is_access)idrC   rU   r6   	area_code
ip_addressreal_ipproduct_typeterminal_nameterminal_tzfw_verpush_verr,   rG   rX   rL   rN   rP   rY   rZ   r[   r\   r]   rH   r^   )companyrC   rU   rV   rW   rX   rY   rZ   r[   r\   rF   r]   r^   )r_   rC   rU   r6   r`   ra   rb   rc   rd   re   rf   rg   r,   rG   rX   rL   rN   rP   rY   rZ   r[   r\   r]   rH   r^   company_name__all__width   )rC   rU   rd   rF   r6   )rC   )rd   rb   rc   rf   rg   r]   r   r^   re   rL   rN   rP   Zop_menu_group_dataCleanZop_menu_group_dataTransferZop_menu_group_terminalMenuZwidgetr?   Nc             C   s   ddi}|  |d ||S )Nobj_id)Zchangeform_view)r   r   form_urlextra_contextr   r   r   add_view   s    zTerminalAdmin.add_viewc             C   s@   |j d|jdd }|r6d|i}| j||d|dS t d S )Nrm   r?   )ro   rp   )POSTrD   GETZ_changeform_viewr   )r   r   Z_idrp   r   r   r   	edit_view   s
    zTerminalAdmin.edit_viewc                s6   i }|dkr| j |d< || tt| j||f|S )z7
        Use special form during user creation
        Nform)add_formupdatesuperr=   get_form)r   r   r;   kwargsdefaults)	__class__r   r   ry      s
    

zTerminalAdmin.get_formc             C   s   |j jS )N)rh   name)r   r;   r   r   r   ri      s    zTerminalAdmin.company_namezCompany Namec             C   s   |j jS )N)r6   r`   )r   r;   r   r   r   r`      s    zTerminalAdmin.area_codeZarea_field_codec       
      C   s   ddl m} ddlm} ddlm} tjs|stj	
  tjkrR|dtd ||j}|d dkr|d s|dtd |jd	|jj}	|jrt|j|	kr|j	j|	d
d |_|	|_|  d S )Nr   )Area)AdminRuntimeWarning)check_sn_validz%sZ'login_authorize_license_terminal_exceedrQ   zBNot allowed to add, not in the authorization list file devices.datrh   T)r   r7   )Zmysite.personnel.modelsr~   Zmysite.admin.exceptionsr   Zmysite.core.zkmimir   r   CLOUD_VERSIONr   r    allcountZMAX_DEVICESr   rC   rr   rD   r"   r#   r   strr!   firstr6   Zsave)
r   r   r;   ru   Zchanger~   r   r   rer   r   r   r   
save_model   s     
zTerminalAdmin.save_modelc       
   
      s   ddl m} ddlm} tt| |}|jj|j	d
d}|t|dtddB }|j}|dkrn|jjn
|j|}	y|	|}|jf |	j|iS  |j|tfk
r   dS X dS )	z
        Returns an instance matching the field and value provided, the primary
        key is used if no field is provided. Returns ``None`` if no match is
        found or the object_id fails validation.
        r   )ValidationError)
Membership)r"   rh   )company_id__inN)rh   )Zdjango.core.exceptionsr   mysite.base.modelsr   rx   r=   get_querysetr    r!   r"   valuesr   modelZ_metar9   Z	get_fieldZ	to_pythonrD   r}   ZDoesNotExist
ValueError)
r   r   Z	object_idZ
from_fieldr   r   r%   	companiesr   Zfield)r|   r   r   
get_object  s    
zTerminalAdmin.get_objectc       	         s   ddl m} tt| |}|j}tjs|j	ddkrj|j
j|jdd}|t|dtd dB }q|t|jd	td dB }n|j|jd	}|jj}|jjs| r|j| d
}|d}tj }|tjdd }|jddi|fd}|S )Nr   )r   r?   ZAll)r"   rh   )r   )rh   )r   )Zarea__inr6   <   )ZsecondsrH   a*  
            SELECT COUNT(*) FROM iclock_terminalcommand WHERE iclock_terminalcommand.terminal_id=iclock_terminal.id
            AND iclock_terminalcommand.return_value IS NULL 
            AND (iclock_terminalcommand.transfer_time IS NULL OR iclock_terminalcommand.transfer_time > %s)
            )ZselectZselect_params)r   r   rx   r=   r   r"   r   r   rs   rD   r    r!   r   r   r#   Zget_auth_areaZis_superuserexistsr   Zselect_relateddatetimenowZ	timedeltaextra)	r   r   r   r:   r"   r   Z	auth_arear   Zvalid_period)r|   r   r   r     s(    


zTerminalAdmin.get_queryset)r?   N)N)N)>r&   r'   r(   r,   r   Zshort_descriptionrG   rH   rL   rN   rP   rT   Zlist_filterZlist_displayr   r   r+   r   Zcalculated_filterZlist_display_paramsZsort_fieldsZorderingZhidden_fieldsZexport_fields_dictr   rv   r   ru   aacZTerminalNewAreaZTerminalClearCommandr   r   ZTerminalClearAttendanceDataZTerminalDeleteCaptureZTerminalClearAllZTerminalReUploadDataZTerminalReUploadTransactionZTerminalReloadDataZTerminalRebootZTerminalReadInformationZTerminalEnrollRemotelyZTerminalDuplicatePunchPeriodZTerminalCaptureZTerminalUpgradeFirmwareZTerminalPullFileZTerminalDaylightSavingTimeZaction_setsr   ZAreaForeignKeyr   ZAreaRadioSelectZformfield_overridesrq   rt   ry   ri   r`   r   r   r   __classcell__r   r   )r|   r   r=   N   sf   







	


r=   )(r   Zdjango.core.cacher   rB   r   Zdjango.httpr   Zdjango.db.modelsr   Zdjango.utils.translationr   r   mysiter   Zmysite.admin.constr   Zmysite.admin.utilsr	   Zmysite.admin.xadmin.filtersr
   Zmysite.iclock.modelsr   Z"mysite.iclock.forms.terminal_formsr   r   r0   r   r   Zmysite.personnelr   r   Zmysite.admin.actionr   Zmysite.iclock.utilsr   r   r+   registerZZKModelAdminr=   r   r   r   r   <module>   s&   !