B
    f.ÉcS  ã               @   sè   d dl Z d dlmZ d dlT d dlT d dlmZ d dlmZ d dl	m
Z
 d dlmZ dd	d
dddddddddddddddgZdZdd„ Zd3dd„Zdd „ Zd!d"„ Zd#d$„ Zd4d%d&„Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ ZdS )5é    N)ÚGoogleV3)Ú*)Ú	formatPIN)Úwrite_tripartite_transaction)Útasks)ÚchoicesÚ0Ú1Ú2Ú3Z14Z15Z16Z17Z18Z19Z21Z22Z23Z26Z32Z35Z203Z207z...c             C   sZ   |dkrV| j  ¡ }xB|D ]:}d |j¡}t |¡}|r|tkr|d7 }t ||¡ qW d S )Né   zarea_finger_{})ZareaÚallÚformatÚidÚcacheÚgetÚPLACEHOLDERÚset)ÚemployeeZbio_typeZareasZarea_objZ	cache_keyÚres© r   ú1G:\easytimepro\master/mysite/iclock\devview_ex.pyÚupdate_finger_count   s    


r   c          
   C   s  yòt ||| d |rò|jrò|jròtd|jƒ}|rò| d¡}|rò|  dd¡}|j}|  dd¡}|  dd¡}	|  dd¡}
|  d	d¡}d}tj}x*|D ]"}|d
 |	kr’|t	|d ƒ7 }P q’W d|› d|› d|› d|› d|
› 
}||dœ}t
j ||¡ tjsòd| kròd| krò| d }| d }tj ¡ }d|krò| d |tjdd kròd||f }t |¡}|sätjrxtj}ntj}t|d}||f}y$|j|ddj}tj||dd W n. tk
râ   tj|d||f dd Y nX |rò|| d< W n tk
r
   Y nX | S ) ué  when uploading transaction log from device,it will exexute this code,you can do anything else
     recordDict={
        'userid': uid, 'checktime': logtime, 'checktype': normalState(flds[2]), verifycode': normalVerify(flds[3]),
        'SN': device.SN, 'WorkCode': wcode, 'Reserved':CRCCode,'purpose':purpose}
        when special situation,you can change recordDict and save new fields to iclock_transaction
    
     line_raw: raw data from device
     emp:emp
     deviceï¼šdevivce
    )ÚdeviceÚempZparamsZalert_settingÚpopup_alertÚemp_codeÚ Ú
punch_timeÚverify_typeÚ
area_aliasÚ
company_idr   r   zEmployee ID: z
 First Name: z
 Punch Time: z
 Verification Type: z
 Area: )ZaccountÚmessageÚ	longitudeÚlatitudez-1.é   )Údaysz	gps_%s_%s)Zapi_keyT)Zexactly_onei€:	 )Útimeoutz%s,%si,  Úgps_location)r   Z
app_statusZapp_punch_statusZget_system_settingr!   r   Ú
first_namer   ZVERIFY_TYPEÚstrr   Zpush_mobile_msg_notificationZdelayÚsettingsZCLOUD_VERSIONÚdatetimeÚnowÚ	timedeltar   ZINTELLIGENTTIME_MAPS_APIZEASYTIMEPRO_MAPS_APIr   ÚreverseZaddressr   Ú	Exception)Z
recordDictZline_rawr   r   Zalert_settings_datar   r   r)   r   r   r    r!   ZverifyZverified_typeÚir"   Údatar#   r$   ÚntÚkr(   ZMAPS_API_KEYZ
geolocatorZlatlongr   r   r   Úline_to_log_ex    s^    

"




r5   c             C   s¤   t j  ¡ }dtjd d| d¡  | d  | d f }yt tj |¡d ¡ W n t	k
rd   Y nX t
 | d ¡}t|d	ƒ}| |¡ | ¡  d
| d  d d… S )Nz%s/%szupload/z%s/z%Y%mÚsnÚpinr   ÚphotoÚwbzACCPHOTO_%sé   )r,   r-   r+   ÚADDITION_FILE_ROOTÚstrftimeÚosÚmakedirsÚpathÚsplitr0   Úbase64Ú	b64decodeÚopenÚwriteÚclose)Úfldsr-   ÚfnameÚls_fÚfr   r   r   ÚsaveAccPhotog   s    
,

rJ   c             C   sr  | j }g }d|kr| d¡}nd|kr0| d¡}|s8d S |d }| d¡}t|ƒ}y|d }W n\ tk
rº   y$| j dd¡}|s| j dd¡}W n" tk
r´   | j dd¡}Y nX Y nX tt	ddƒr<|d d… }t
j
 ¡ }t
 
t|dd	… ƒt|d	d
… ƒt|d
d… ƒddd¡}	|	|t
jt	jd k r<|d d… S |}
d|krª|
 d¡}|d  d¡}|r–|d dkr–d|d t|d ƒ|d f }nd|d |d f }td|d d
… |jf d|ƒ}
yt tj |
¡d ¡ W n tk
rø   Y nX tj |
¡sf|rfd| ¡ krft|d ƒdkrft|
dƒ(}|d dd … }| |¡ | ¡  W d Q R X |d d… S )Ns   CMD=uploadphotos   CMD=realuploadr   zutf-8ÚPINr   ÚVALID_TRANSACTION_DAYSé   é   é   )r&   é   ú-r   Ú.r   z%s-%s.%sz%s.%sz%s/%sÚsizeiè  r9   )Úbodyr@   ÚdecodeZsetValueDicr0   ZPOSTr   ZGETÚgetattrr+   r,   r-   Úintr.   rL   r   ZgetUploadFileNamer6   r=   r>   r?   ÚisfileÚkeysrC   rD   rE   )Úrequestr   ÚdZdListZhlistZpdr7   r4   r3   Zlog_timerG   ÚfnZlfnamerI   r   r   r   ÚsaveAttPhotou   s\    


4

 &
r]   c          	   C   s@  ddl m} d| ¡ krTt|d ƒt|d ƒkrTt|d ƒdk rTd|d  d d… S |d  d	¡}t|d ƒ}d
}tj 	t
jdd¡}tj |¡rÖ| jj}tj 	t
jd|¡}tj |¡sÀt |¡ |d }d||f }	n,| jj ¡ }
d|
||d f }dtƒ |f }	t |d ¡}tj |	¡rPt|	dƒ}| ¡ }W d Q R X |rP||krPd
S t|	dƒ}| |¡ | ¡  y0|r‚d||f }	ndtƒ |f }	t |	¡ W n tk
r²   Y nX y`tj ¡ }|jj|| j d}|r|d }|j!r||j!  "¡ dkr||_!| j#|_$| %¡  W n tk
r*   Y nX d|d  d d… S )Nr   )ÚEmployeeÚSizeÚContentiè  zUser Photo_%s failedZFileNamer:   rR   r   r8   Z 6b969e80f3ff11e9afc7acde48001122z%s/%sz%s_%s.%sr   Úrbr9   z%s/thumbnail/%s)r   r!   é   zUser Photo_%s)&Zmysite.personnel.modelsr^   rY   ÚlenrW   r@   r   r=   r?   Újoinr+   r;   ÚexistsÚcompanyÚhex_idr>   ÚnameÚlowerZphotoDirrA   rB   rX   rC   ÚreadrD   rE   Úremover0   r,   r-   ZobjectsÚfilterr!   Úupdate_timeZtotal_secondsr6   Ú	enroll_snÚsave)r   rF   r^   r\   r   Zmulti_company_photo_pathZmulti_company_flagr!   ÚfilenamerG   Zcompany_namerH   ÚafÚprerI   r-   Zempsr   r   r   r   Ú	savePhoto±   sZ    4



rs   c             C   s:  ddl }ddl}ddlm} ddlm} ddlm} yÀt|d ƒ}t	|d ƒ|kr°|s^dS t
 |d ¡}	d}
tj d	| jj¡}||ƒ}d
j|d d}|dk r²dj|d d}tj ||¡}|jj|j|jfd}| ¡ r tj |¡r t|dƒ}| ¡ }W dQ R X |r ||	kr d}
|d| jjd}|j ¡ }|
rž|jj}||jkr*t|dƒ}| |	¡ W dQ R X | ¡ sú|tj d| jj¡ƒ}dj| ¡ d}ttj ||¡dƒ}| |	¡ W dQ R X |||j|j | j!|||||jd	j"dd n|j#|| j!d ||_$| j!|_%|j"ddgd nr|tj d| jj¡ƒ}dj| ¡ d}|||j|j | j!||dj"dd ttj ||¡dƒ}| |	¡ W dQ R X n|j#|| j!d nDt&j'rÔt(dt	|d ƒ|d f ƒ d j||d |d d!dd"… S W n. t)k
r$ } zt(d#|ƒ W dd}~X Y nX d$j|d%dd"… S )&z
    :param device:
    :param flds: BIOPHOTO PIN=${XXX}	FileName=${XXX}	Type=${XXX}	Size=${XXX}	Content=${XXX}
    :return:
    r   N)Úget_or_create_folder)Úconst)Úget_comm_settingr_   r`   TZbiophotoz	{pin}.jpgrK   )r7   i¸  z{pin}_error.jpg)Zapproval_state__inra   FZdevice_policy)r!   r9   Úregisterz
{uuid}.jpg)Úuuid)	r   r)   Ú	last_namern   Úregister_photoÚregister_timeÚapproval_photoÚapproval_timeÚapproval_state)Zforce_insert)r}   rn   rm   rn   )Zupdate_fields)r   r)   ry   rn   rz   r{   z*saveAdPhoto Failed=len(Content)=%s,size=%sz'[BioPhoto ERROR]_{emp}_{content}:{size})r   ZcontentrS   r:   zsaveAdPhoto=z[BioPhoto]_{emp})r   )*rx   r,   Úmysite.utilsrt   Úmysite.iclockru   Zmysite.iclock.comm.utilsrv   rW   rc   rA   rB   r=   r?   rd   rf   rg   r   Zbiophoto_setrl   ZAPPROVAL_PASSEDZAPPROVAL_AUTO_APPROVEDÚcountrX   rC   rj   r   r-   ZmodelrD   Zuuid4r)   ry   r6   ro   Úupdaterm   rn   r+   ÚDEBUGÚprintr0   )r   rF   r   rx   r,   rt   ru   rv   Z
photo_sizeZcurZis_newZbio_pathZ	store_dirr|   Zapproval_photo_pathZobjsrq   rr   r~   r3   ÚclsZrfZrprz   Úer   r   r   ÚsaveAdPhotoì   s€    





r‡   c             C   s   dS )u   æŽ¥æ”¶è®¾å¤‡ä¸Šä¼ çš„äººå‘˜Nr   )r   ÚlineZ
new_recordr   r   r   Úline_to_user8  s    r‰   c             C   s¨  d}|j dkr d}| jr$| j ¡ p&d}yÄ| jr\ytt| jƒƒ}W n   td| jƒ Y nX d}| jphd}| ¡ dkrzd}| j	sŠ| j	dkr t
|jdƒr d| j	 }d}d|  ¡ |r¸d	| pºdd
| jrÈ| jpÊd d| d| dd|d| f	 }W n. tk
r }	 ztd|	ƒ W dd}	~	X Y nX n„| jr4| j ¡ p6d}|j rL|j dkr`d}| j}
|
rd|
 ¡ }
|
r¬|
 ¡ dkr¬t|ddƒdkr|
}nt|
ƒdk r¬t|
ƒpªd}d}| jpºd}| ¡ dkrÎd}| j	sî| j	dksî| j	dkrt
|jdƒrd| j	 }d}| jr| j}d|  ¡ |r0d	| p2dd
| jrD| jpFd d| d| d||f }t| dƒr¤| jr¤| jr¤d| j d¡| j d¡f }d||f }|S )uK  
    starttime = OldEncodeTime(obj.acc_startdate)
    endtime = OldEncodeTime(obj.acc_enddate)
    ename = emp.EName and emp.EName.strip() or ""
    ret = "DATA UPDATE user CardNo=%s	Pin=%s	Password=%s	Group=%s	StartTime=%s	EndTime=%s	Name=%s	Privilege=%s" % ( card or '', emppin, emp.MVerifyPass or '', grp or 0, starttime, endtime,
        ename, emp.Privilege or 0)
    ç”Ÿæˆè€ƒå‹¤å‘½ä»¤
            card = ''
            if emp.Card:
                if getattr(device,'CardProtFormat','0')=='1':
                    card=emp.Card
                else:
                    if len(emp.Card)<11:
                        card=getNormalCard(emp.Card) or ""
            Verify = ""
            if (emp.VERIFICATIONMETHOD or emp.VERIFICATIONMETHOD == 0):
                if isSupportpush(device):
                    Verify="Verify=%s" % emp.VERIFICATIONMETHOD
            ret= "DATA USER PIN=%s	%s	%s	%s	%s	%s	Grp=%s	%s"%(emp.pin(),
                    ename and ("Name=%s"%ename) or "",
                    "Pri=%s"%(emp.Privilege and emp.Privilege or 0),
                    "Passwd=%s"%(emp.MVerifyPass or ""),
                    "Card=%s"%(card),
                    "",
                    1,
                    Verify#(emp.VERIFICATIONMETHOD or emp.VERIFICATIONMETHOD==0) and ("Verify=%s" % emp.VERIFICATIONMETHOD) or ""
                    )

    r   rM   zwrong card=)Znoner   z2.3.0z	Verify=%sz,DATA USER PIN=%s	%s	%s	%s	%s	%s	Grp=%s	%s	%szName=%szPri=%sz	Passwd=%szCard=%sr   zCategory=%szzk_get_emp_cmd_ex=N)é   é   é   ZCardProtFormatr   r	   é   éÿÿÿÿz
	Verify=%sz(DATA USER PIN=%s	%s	%s	%s	%s	%s	Grp=%s%sÚvalidity_startz)Expires=1	StartDatetime=%s	EndDatetime=%sz%Y-%m-%dT00:00:00z%Y-%m-%dT23:59:59z%s	%s)Úproduct_typer)   ÚstripZcard_nor*   rW   r„   Zdevice_passwordri   Zverify_modeZDevIdentity_exZpush_verr7   Zdev_privileger0   rV   rc   ZgetNormalCardÚ	acc_groupÚhasattrr   Zvalidity_endr<   )r   r   ZretÚcardZenameZVerifyZ
device_pwdZ	devce_pwdZblackr†   Zemp_cardr’   Zret_addr   r   r   Úzk_get_emp_cmd_ex=  sŠ    


   
r•   c             C   s   d}|S )uJ  
    ç”¨äºŽIDæ¶ˆè´¹æ—¶æ›´å¤šé€»è¾‘åˆ¤æ–­æ—¶ä½¿ç”¨ï¼Œæ¯”å¦‚åˆ¤æ–­æ— è€ƒå‹¤ä¸å…è®¸æ¶ˆè´¹
    :param request:
    :param device: è®¾å¤‡å¯¹è±¡
    :param card: å¡å·
    :param postype: æ¶ˆè´¹ç±»åž‹
    :return: å¦‚æžœæ­£å¸¸æ¶ˆè´¹è¿”å›ž""    ç¦æ­¢æ¶ˆè´¹è¿”å›ž
        resp=u"Ret=NO
retnumber=-1
errmsg=%s"% _(u"æ¶ˆè´¹å¤±è´¥")
    r   r   )rZ   r   r”   ZpostypeÚrespr   r   r   Úposmodveryfy_ex²  s    
r—   c             C   s   d}|S )NÚOKr   )rZ   r   r–   r   r   r   Úon_pos_businessÁ  s    r™   c             C   sÔ   | j }| d¡}i }xB|D ]:}| d¡}x*|D ]"}|r.| d¡}|d ||d < q.W qW d}d}||7 }d| ¡ krÈ|d rÈ|d }	d	|	 }
d}t|d
 ƒ}||kr¾|d|d  7 }|d }qÐ|d }n|d }|S )zZ  Remote Identification ,AuthType=device means globally remote APB,it is used for Acc pushz
ú	ú=r   r   r   z	AUTH=%s
r7   z	bgdata_%sÚinoutstatuszCONTROL DEVICE 1 %s 1 15
Z	eventaddrÚSUCCESSZFAILED)rT   r@   rY   rW   )rZ   r   Úraw_DataÚlinesZr_dictÚtrˆ   Úlr–   r7   r4   Zinoroutrœ   r   r   r   ÚprocessAuthServerÆ  s.    






r¢   c             C   s"   | j }| d¡}td|ƒ d}|S )z% background verification, POST methodzutf-8zprocessBackgroundServe==r˜   )rT   rU   r„   )rZ   r   rž   ZrawDatar–   r   r   r   ÚprocessBackgroundServerã  s
    

r£   )NN)N)rA   Zgeopy.geocodersr   r   Zmysite.core.zktoolsZmysite.personnel.utilsr   Z(mysite.personnel.send_tripartite_messager   Zmysite.mobiler   r€   r   ZattEventlistr   r   r5   rJ   r]   rs   r‡   r‰   r•   r—   r™   r¢   r£   r   r   r   r   Ú<module>   s,   
G<;
Lu