B
    ucaC                 @   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mZ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 d dlmZ d dlm Z m!Z! d dlm"Z" G dd deeZ#ee	j$e#ddd Z%dS )    N)models)gettext_lazy)cache)signals)receiver)settings)	BaseModelSTATUS_VALIDSTATUS_RESIGN_PENDINGSTATUS_RESIGNSTATUS_INVALID)AbstractCloud)AreaForeignKey)Area)BOOLEAN_YES
BOOLEAN_NOBOOLEANS)const)db_constchoices)	cache_keyc                   s  e Zd ZejeddejddZejedej	dZ
ejeddddZejedddd	d
Zejedejd	dZejedejejdZeeeddd	ejdZejeddeddZejedejejdZejedej ej!dddZ"ejeddeddZ#ejedej$ddZ%ejeddej&ddd	d Z'ejed!e(e)d"Z*ejed#e+e)d"Z,ejed$ddd	d
Z-ejed%d&ddej.d	d'Z/ejed(ddd	d)Z0ejed*ej1ddd	d+Z2ejed,ej3d-ddd	d.Z4ejed/ddd	ej5d0Z6ejed1ej7d	d2Z8ejed3ej7ddd	d+Z9ejed4d5ddd	d6Z:ej;ed7d&d	d8Z<ejed9ej=ddd	d:Z>ejed;ej?ddd	d+Z@ejed<ejAddd	d+ZBejed=ejCddd	d+ZDejed>ejCddd	d+ZEejed?ejCddd	d+ZFejed@ddd	dAZGejedBddd	dCZHej;edDd&d	d8ZIejedEddd	dAZJejedFddd	dCZKej;edGdd	d8ZLejedHddd	dAZMejedIddd	dCZNejedJejOddd	d:ZPej;edKd&d	d8ZQejedLddd	dAZRejedMddd	dCZSejedNejOddd	d:ZTej;edOd&d	d8ZUejedPd&ddd	dQZVejedRddd	dCZWejedSejOddd	d:ZXej;edTd&d	d8ZYejedUddd	dAZZejedVddd	dCZ[ejedWejOddd	d:Z\ejedXd&d	d8Z]ej^edYddd	d
Z_ej^edZddd	d[Z`ej^ed\ddd	d[Zaejed]e+e)d"Zbejed^d_ddd`daZcdbZdd&Ze fdcddZfdedf Zgdgdh Zh fdidjZids fdkdl	Zjdmdn Zkdodp ZlG dqdr drZm  ZnS )tTerminalZterminal_field_snT)verbose_nameunique
max_lengthZdb_indexZterminal_field_alias)r   r   Zterminal_field_ipAddress)r   nullblankZterminal_field_realIPAddressF)r   r   r   editableZterminal_field_state)defaultr   Zterminal_field_timezone)r   r   r   Zterminal_field_area)r   r   r   Z	on_deleteZterminal_field_heartbeat
   Zterminal_field_heartbeatHelpTxt)r   r   Z	help_textZterminal_field_transferModeZterminal_field_deviceDirection)r   r   r   r   r   Zterminal_field_transferInterval   Z&terminal_field_transferIntervalHelpTxtZterminal_field_transferTimez00:00;14:05)r   r   r   Zterminal_field_productType	   )r   r   r   r   r   r   Zterminal_field_isAttendance)r   r   r   Zterminal_field_isRegistrationZterminal_field_purposeZ#terminal_field_accessControllerTyper   )r   r   r   r   r   r   Zterminal_field_authentication)r   r   r   r   Zterminal_field_style)r   r   r   r   r   Zterminal_field_uploadFlagZ
1111100000)r   r   r   r   r   r   Zterminal_field_firmwareVersion)r   r   r   r   r   Z"terminal_field_pushProtocolVersion)r   r   r   Zterminal_field_pushVersionZterminal_field_languageT   )r   r   r   r   r   Zterminal_field_isTft)r   r   r   Zterminal_field_terminalName)r   r   r   r   r   Zterminal_field_platformZterminal_field_oemVendorZterminal_field_logStampZ terminal_field_operationLogStampZterminal_field_captureStampZterminal_field_userCount)r   r   r   r   Zterminal_field_userCapacity)r   r   r   Zterminal_field_photoFuncOnZterminal_field_transactionCountZ"terminal_field_transactionCapacityZterminal_field_fpFuncOnZterminal_field_fingerprintCountZ"terminal_field_fingerprintCapacityZ*terminal_field_fingerprintAlgorithmVersionZterminal_field_faceFuncOnZterminal_field_faceCountZterminal_field_faceCapacityZ#terminal_field_faceAlgorithmVersionZterminal_field_fingerVeinFuncOnZterminal_field_fingerVeinCount)r   r   r   r   r   Z!terminal_field_fingerVeinCapacityZ)terminal_field_fingerVeinAlgorithmVersionZterminal_field_palmFuncOnZterminal_field_palmCountZterminal_field_palmCapacityZ#terminal_field_palmAlgorithmVersionZterminal_field_lockFuncZterminal_field_lastActivityZterminal_field_uploadTime)r   r   r   Zterminal_field_syncTimeZ"terminal_field_enableAccessControlZdevice_field_gpsLocation2    )r   r   r   r   Nc                s&   t t| j|| | j| _| j| _d S )N)superr   __init__Zarea_idoriginal_area	is_accessoriginal_is_access)selfargskwargs)	__class__ <G:\easytimepro\master/mysite/iclock\models\model_terminal.pyr&      s    zTerminal.__init__c             C   s
   d| j  S )Nz%s)sn)r*   r.   r.   r/   __str__   s    zTerminal.__str__c             C   s    || _ tdj| jd| dS )zIn case data mismatchzpush_time_{sn})r0   N)	push_timer   setformatr0   )r*   r2   r.   r.   r/   set_push_time   s    zTerminal.set_push_timec                s   | j sd| _ | jsd| _| jtjkr*d| _| jd kr:t| _tdj	| j
d}|rX|| _| jd krt| jjst| jj| _tt| j|| ttj| j
  ttj| j
  d S )Nr    r   zpush_time_{sn})r0   )authenticationcontroller_typeproduct_typer   ZATTENDANCE_ACCESS_TERMINALstatusr	   r   getr4   r0   r2   Zcompanyarea
is_defaultZ
company_idr%   r   savedeleter   TERMINAL_CACHETERMINAL_CACHE_PREVIOUS)r*   r+   r,   r2   )r-   r.   r/   r=      s     

zTerminal.savec                sN   t t| || tdj| jd ttj| j  ttj| j  d S )Nzpush_time_{sn})r0   )	r%   r   r>   r   r4   r0   r   r?   r@   )r*   ZusingZkeep_parents)r-   r.   r/   r>      s    zTerminal.deletec             C   sX   ddl m} y2t| dd }|s8|| j}t| d| |S |S W n tk
rR   d S X d S )Nr   )	getDeviceZdevice)mysite.iclock.utilsrA   getattrr0   setattr	Exception)r*   rA   devr.   r.   r/   wrap   s    
zTerminal.wrapc          
   C   s  dd l }ddlm} ddlm} ddlm} y| j|jkr@|jS || j	}|rZ|j
sZ|jS |rl| j
sl|j
| _
|r|j
| j
kr|j
| _
|j  | j
 }| |jkr|jS |r|j|j|jfkr|jS |jS |jS  tk
 r } ztd| dS d }~X Y nX d S )Nr   )r   )r   )rA   zgetDynState=)datetimemysiter   mysite.iclockr   rB   rA   stateZTERMINAL_DISABLEr0   last_activityZTERMINAL_OFFLINEZnowZtotal_secondsZMAX_DEVICES_STATEZTERMINAL_COMMUNICATIONZTERMINAL_UPLOADTERMINAL_NORMALrE   print)r*   rI   r   r   rA   ZaObjder.   r.   r/   getDynState   s2    



zTerminal.getDynStatec               @   s   e Zd ZejZedZeZdS )zTerminal.MetaZiclock_model_terminalN)	__name__
__module____qualname__r   Z	APP_LABELZ	app_label_r   Zverbose_name_pluralr.   r.   r.   r/   Meta   s   rW   )NF)orS   rT   rU   r   Z	CharFieldrV   r   ZMAX_TERMINAL_SNr0   ZMAX_TERMINAL_ALIASaliasZGenericIPAddressFieldZ
ip_addressZreal_ipZIntegerFieldr   rN   rL   ZSmallIntegerFieldr   ZTIMEZONE_CHOICESr   ZDEVICE_TIME_ZONEZterminal_tzr   r   ZCASCADEr;   Z	heartbeatZTRANSFER_MODEZ	REAL_TIMEZtransfer_modeZDEVICE_DIRECTIONZDEVICE_IN_OUTZdevice_directionZtransfer_intervalZMAX_TRANSFER_TIMEZtransfer_timeZPRODUCT_TYPE_CHOICESr8   r   r   Zis_attendancer   Zis_registrationZpurposeZACCESS_CONTROLLER_TYPE_CHOICESr7   r6   ZMAX_TERMINAL_STYLEZstyleZMAX_UPLOAD_FLAGZupload_flagZMAX_FIRMWARE_VERSIONZfw_verZMAX_PUSH_VERSIONZpush_protocolZpush_verZlanguageZBooleanFieldZis_tftZMAX_TERMINAL_TYPEZterminal_nameZMAX_TERMINAL_PLATFORMplatformZMAX_OEM_VENDORZ
oem_vendorZ	MAX_STAMPZ	log_stampZop_log_stampZcapture_stampZ
user_countZuser_capacityZphoto_func_onZtransaction_countZtransaction_capacityZ
fp_func_onZfp_countZfp_capacityZMAX_ALGORITHM_VERSIONZ
fp_alg_verZface_func_onZ
face_countZface_capacityZface_alg_verZ
fv_func_onZfv_countZfv_capacityZ
fv_alg_verZpalm_func_onZ
palm_countZpalm_capacityZpalm_alg_verZ	lock_funcZDateTimeFieldrM   Zupload_timer2   r(   Zgps_locationr'   r)   r&   r1   r5   r=   r>   rG   rR   rW   __classcell__r.   r.   )r-   r/   r      s   














r   )senderc             K   s  ddl m} ddlm} ddlm} ddlm}	 |rLd|krLt|dkrLd S |j	}
t
|d}|rytjj|d	}W q tk
r   |
}Y qX n|
}||
kr||j}|r|js|s|
js||jd
 ||jd |tddd |jdd n|
jr d S |jjddd  |jjttfd}|
jjttfd}tt|tt| }dd |D }||| ||jd
 ||jd |tddd |jdd d S )Nr   )delete_users_data)saveCmd)rA   )TerminalCommandr2   r    r'   )idINFOz	CHECK ALLim  )r2   )update_fieldsT)Ztransfer_time__isnullZreturn_time__isnull)Z
status__inc             S   s   g | ]}|  qS r.   )Zpin).0rQ   r.   r.   r/   
<listcomp>  s    z'device_area_migrate.<locals>.<listcomp>zCHECK OP)Zmysite.core.commr\   Zmysite.utilsr]   rB   rA   Zmysite.iclock.modelsr^   lenr;   rC   r   Zobjectsr:   rE   r0   r<   Zpkr5   rI   r=   Zterminalcommand_setfilterr>   Zemployee_setr	   r
   r3   list)r[   instanceZcreatedrawra   r,   r\   r]   rA   r^   Zcur_arear'   rF   Zpre_employeesZcur_employeesZremovedr.   r.   r/   device_area_migrate   sB    



ri   )&rI   Z	django.dbr   Zdjango.utils.translationr   rV   Zdjango.core.cacher   Zdjango.db.modelsr   Zdjango.dispatch.dispatcherr   Zdjango.confr   Zmysite.admin.modelsr   r	   r
   r   r   Z!mysite.admin.abstract_cloud_modelr   Zmysite.personnel.fieldsr   Zmysite.personnel.modelsr   Zmysite.base_choicesr   r   r   rK   r   r   r   r   r   Z	post_saveri   r.   r.   r.   r/   <module>   s"    C