B
    ¦òGc  ã               @   s¢  d dl Z d dlZd dlZd dlZd dl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mZmZ d dlmZ d dlmZ d½dd	„Zd¾d
d„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd¿dd„Zdd„ Z dd „ Z!dÀd"d#„Z"d$d%„ Z#dÁd'd(„Z$dÂd*d+„Z%dÃd,d-„Z&dÄd.d/„Z'dÅd0d1„Z(dÆd3d4„Z)dÇd5d6„Z*dÈd7d8„Z+d9d:„ Z,d;d<„ Z-d=d>„ Z.d?d@„ Z/dÉdBdC„Z0dÊdEdF„Z1dGdH„ Z2dIdJ„ Z3dËdKdL„Z4G dMdN„ dNej5ƒZ5dOdP„ Z6dQdR„ Z7dSdT„ Z8e	j9fdUdV„Z:dWdX„ Z;dYdZ„ Z<d[d\„ Z=d]d^„ Z>d_d`„ Z?dadb„ Z@dcdd„ ZAdedf„ ZBdgdh„ ZCdÌdidj„ZDdÍdkdl„ZEdmdn„ ZFdodp„ ZGdqdr„ ZHdsdt„ ZIdudv„ ZJdwdx„ ZKdydz„ ZLd{d|„ ZMd}d~„ ZNdd€„ ZOdd‚„ ZPdƒd„„ ZQd…d†„ ZRdÎdˆd‰„ZSdŠd‹„ ZTdŒd„ ZUdŽd„ ZVdÏdd‘„ZWdÐd’d“„ZXdÑd”d•„ZYdÒd–d—„ZZg ddfd˜d™„Z[dšd›„ Z\dÓdœd„Z]dÔdždŸ„Z^d d¡„ Z_d¢d£„ Z`dÕd¤d¥„ZaG d¦d§„ d§ebƒZcd¨d©„ Zddªd«„ Zee	jffd¬d­„Zgd®d¯„ Zhd°d±„ ZidÖd³d´„Zjdµd¶„ Zkd·d¸„ Zld×d¹dº„ZmG d»d¼„ d¼ej5ƒZndS )Øé    N)ÚUUID)Úsettings)Úcache)Ú
connectionÚconnectionsÚtransactionÚDatabaseErrorÚIntegrityError)ÚHttpResponse)Ú	smart_strc             C   s
   t | |ƒS )z(Return a unicode value from the argument)r   )ÚobjÚencoding© r   ú%G:\easytimepro\master/mysite/utils.pyÚsafe_unicode   s    r   c          	   C   sX   dd l }|d krtj}d }n|}|j  ¡ |j|d }| j||||tjtjtjd d S )Nr   )Zseconds)Úmax_ageÚexpiresÚpathZdomainZsecure)	Údatetimer   ZLANGUAGE_COOKIE_AGEÚnowÚ	timedeltaÚ
set_cookieZLANGUAGE_COOKIE_PATHZSESSION_COOKIE_DOMAINZSESSION_COOKIE_SECURE)ÚresponseÚkeyÚvalueZexpirer   r   r   r   r   r   r      s    r   c              C   s2   t jd } yt | ¡ W n tk
r,   Y nX | S )Nz/tmp)r   ÚADDITION_FILE_ROOTÚosÚmakedirsÚ	Exception)Úretr   r   r   ÚtmpDir%   s    
r    c              C   s>   t jd } ytj | ¡s"t | ¡ W n tk
r8   Y nX | S )Nz/logs)r   r   r   r   Úisdirr   r   )r   r   r   r   ÚlogDir.   s    
r"   c             C   s4   yt j | ¡st  | ¡ W n tk
r.   Y nX d S )N)r   r   r!   r   r   )Údirnamer   r   r   Ú	createDir8   s
    r$   c              C   s   t jd } | S )Nz/outbox)r   r   )r   r   r   r   Ú	outBoxDir@   s    
r%   c              C   s   t jd } | S )Nz/inbox)r   r   )r   r   r   r   ÚinBoxDirE   s    
r&   c              C   s   t jd } | S )Nz
/badoutbox)r   r   )r   r   r   r   ÚbadoutBoxDirJ   s    
r'   c              C   s   t jd } | S )Nz/senderoutbox)r   r   )r   r   r   r   ÚsenderoutBoxDirO   s    
r(   Tc             C   s‚   dt ƒ tj ¡  d¡f }t||r&dp(dƒL}y|  d¡} | | ¡ W n, tk
rr } ztd|ƒ W d d }~X Y nX W d Q R X |S )Nz	%s/%s.txtz%Y%m%d%H%M%Sza+zw+Úgb18030z-------)	r%   r   r   ÚstrftimeÚopenÚencodeÚwriter   Úprint)ÚtextÚappendÚfnÚfÚer   r   r   ÚsmsFileT   s    
&r4   c              C   s   t jd } | S )Nz/reports)r   r   )r   r   r   r   Ú	reportDirc   s    
r5   c              C   s   t jd } | S )Nz/photo)r   r   )r   r   r   r   ÚphotoDirh   s    
r6   Útmpc             C   s*   t j tj| ¡}t j |¡s&t  |¡ |S )N)r   r   Újoinr   r   Úexistsr   )Úsubr   r   r   r   Ú
store_pathm   s    
r;   c          	   C   s¸   |   d¡}x¢tdt|ƒƒD ]}|| }yb|d dkr^tt |dd… d¡ƒ|dd…  ||< n(tt |dd… d¡ƒ|dd…  ||< W q tk
r¨   d| ||< Y qX qW d	 |¡S )
z(unquote('abc%20def%u4E66') -> 'abc def'.ú%é   r   Úué   é   Né   Ú )	ÚsplitÚrangeÚlenZunichrÚstringZatoiÚchrÚKeyErrorr8   )ÚsÚresÚiÚitemr   r   r   Úunquotet   s    
*,rM   Fc             C   sr   t | dƒ^}y| |¡ W n> tk
rX   y| | d¡¡ W n tk
rR   Y nX Y nX | d¡ W d Q R X | S )Nzw+zutf-8Ú
)r+   r-   r   r,   )r1   r/   r0   Zctlsizer2   r   r   r   Ú
saveToFile…   s    rO   r=   c             C   s¼   dt ƒ |f }t|dƒ^}y| | ¡ W n> tk
rf   y| |  d¡¡ W n tk
r`   Y nX Y nX | d¡ W d Q R X y.tj |¡}d}||kr¨t|dƒ}| ¡  W n   Y nX d S )Nz%s/info_%s.txtza+zutf-8rN   i   Úw)	r    r+   r-   r   r,   r   r   ÚgetsizeÚclose)rI   ÚsnZlog_fnr2   Ú
error_sizeÚ	file_sizer   r   r   Ú
appendFile“   s$    
rV   c             C   sˆ   dt ƒ | f }t||rdpdƒ^}y| |¡ W n> tk
rn   y| | d¡¡ W n tk
rh   Y nX Y nX | d¡ W d Q R X |S )Nz%s/%sza+zw+zutf-8rN   )r    r+   r-   r   r,   )Únamer/   r0   r1   r2   r   r   r   ÚtmpFileª   s    rX   c          	   C   sj   dt ƒ tj ¡  d¡f }t||r&dp(dƒ4}y| | ¡ W n tk
rP   Y nX | d¡ W d Q R X |S )Nz%s/logs_%s.txtz%Y%m%dza+zw+rN   )r"   r   r   r*   r+   r-   r   )r/   r0   r1   r2   r   r   r   ÚlogFile¸   s    rY   c          	   C   sT   dt ƒ | f } t| |rdpdƒ*}y| |¡ W n tk
rD   Y nX W d Q R X | S )Nz	%s/%s.logza+zw+)r"   r+   r-   r   )r1   r/   r0   r2   r   r   r   ÚlogsFileÄ   s    rZ   Úadminc             C   s¶   d}t jd|   }t|ƒ d|tj ¡  d¡|f }|r²t||rDdpFdƒ^}y| |¡ W n> tk
r˜   y| | 	d¡¡ W n tk
r’   Y nX Y nX | d¡ W d Q R X |S d S )	NrB   z/schedule/%sz%s/%s_%s.txtz%Y%m%d%H%M%Sza+zw+zutf-8rN   )
r   r   r$   r   r   r*   r+   r-   r   r,   )ÚLogFlagr/   Úuserr0   r1   r   r2   r   r   r   ÚsaveScheduleLogToFileÏ   s     r^   c             C   s¨   d}t jd|   }t|ƒ d||f }|r¤t||r6dp8dƒ^}y| |¡ W n> tk
rŠ   y| | d¡¡ W n tk
r„   Y nX Y nX | d¡ W d Q R X |S d S )NrB   z/schedule/%sz	%s/%s.txtza+zw+zutf-8z
)r   r   r$   r+   r-   r   r,   )r\   r/   Úpinr0   r1   r   r2   r   r   r   ÚsaveEmpScheduleLogToFileä   s    r`   c          	   C   s´   t dtƒ tj ¡  d¡f dƒh}| dtj ¡  ¡ | rd| d| jd | jd f ¡ | | j¡ | d¡ tj	|d	 | d
¡ W d Q R X yt 	¡  W n t
k
r®   Y nX d S )Nz%s/error_%s.txtz%Y%m%d%H%M%Sza+z---%s: z-- %s%s --
ÚREMOTE_ADDRZ	PATH_INFOrN   )Úfilez"---------------------------------
)r+   r    r   r   r*   r-   ÚMETAZbodyÚ	tracebackÚ	print_excr   )Úrequestr2   r   r   r   ÚerrorLog÷   s    "
rg   c             C   s$   t | dƒ}| t|ƒ¡ | ¡  d S )NÚwb)r+   r-   Ú
memoryviewrR   )r1   ZimageZimgsaver   r   r   Ú	saveImage  s    
rj   c             C   s"   x| d dkr| d d… } qW | S )Néÿÿÿÿú r   )rI   r   r   r   Útrim0  s    rm   c             C   s   |   dd¡  dd¡} | S )NrN   rB   ú)Úreplace)r7   r   r   r   ÚtrimTemp  s    rp   c             C   s²   ddddddddd	d
ddg}t | ƒdkrª| dd …  d¡}y| d¡ W n tk
r\   Y nX y4| d d… d|d d| |d ¡ t|d ƒf  S  tk
r¦   dS X ndS d S )NZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecé   é	   ú rB   z
%s%02d%02drA   r=   r   )rE   rC   Úremover   ÚindexÚint)ZverZmlZtlr   r   r   ÚfwVerStd  s    4rw   ú
text/plainc             C   s   t | d}d|d< d|d< |S )N)Zcontent_typezno-cacheZPragmazno-storezCache-Control)r
   )Úmtyper   r   r   r   Úhead_response*  s    
rz   rB   c             C   sT   |rd}t |ƒ}t| ttfƒr&t| ƒ} t| ƒ} |r>d|| f } d|d< | | ¡ |S )Nz	text/htmlz%s(%s)Ú*zAccess-Control-Allow-Origin)rz   Ú
isinstanceÚlistÚdictÚdumps1r   r-   )Úcontentry   Úcallbackr   r   r   r   ÚgetJSResponse1  s    
r‚   c             C   s
   t  | ¡S )N)ÚjsonÚdumps)r€   r   r   r   Údumps_ascii@  s    r…   c             C   s   t j| ddS )NF)Úensure_ascii)rƒ   r„   )r€   r   r   r   Údumps_non_asciiD  s    r‡   c             K   sH   |  dd¡}t|ƒ}t| ttfƒr*t| ƒ} t| ƒ} d|d< | | ¡ |S )Nry   z
text/plainr{   zAccess-Control-Allow-Origin)Úgetrz   r|   r~   r}   r…   r   r-   )r€   ÚkwargsZ	meta_typer   r   r   r   ÚJsonResponseH  s    
rŠ   c               @   s   e Zd Zdd„ ZdS )ÚJSONEncoderc             C   sP   t |tjƒr| d¡S t |tjƒr,| d¡S t |tjƒrB| d¡S tj | |¡S )Nz%Y-%m-%d %H:%M:%Sz%Y-%m-%dz%H:%M:%S)r|   r   r*   ÚdateÚtimerƒ   r‹   Údefault)Úselfr   r   r   r   rŽ   Y  s    


zJSONEncoder.defaultN)Ú__name__Ú
__module__Ú__qualname__rŽ   r   r   r   r   r‹   W  s   r‹   c             C   s   t ƒ  | ¡S )N)r‹   r,   )Údatar   r   r   r„   c  s    r„   c             C   s
   t  | ¡S )N)rƒ   r„   )r€   r   r   r   r   h  s    r   c             C   s   t j| ddS )NF)r†   )rƒ   r„   )r€   r   r   r   Údumps2l  s    r”   c             C   s
   t  | ¡S )N)rƒ   Úloads)Ústrr   r   r   r   r•   p  s    r•   c             C   s\   |   dd¡  dd¡  dd¡  dd¡  d	d
¡  d	d¡  dd¡  dd¡  dd¡  dd¡  dd¡S )zBReturns the given HTML with ampersands, quotes and carets encoded.ú&z&amp;ú<z&lt;ú>z&gt;ú"z&quot;ú'z&#39;z&#x27;rs   z&nbsp;rn   rB   rN   ú\ú	z&#9)ro   )Zhtmlr   r   r   Úescapet  s    rž   c              C   s   t j  ¡ } t   | j| j| j¡S )N)r   r   ÚyearÚmonthÚday)Údr   r   r   Útoday|  s    
r£   c              C   s.   t j  ¡ } | t  dd¡ } t   | j| j| j¡S )Nr=   r   )r   r   r   rŸ   r    r¡   )r¢   r   r   r   ÚnextDay  s    
r¤   c             C   s0   | t  dd¡ } t   | j| j| j¡t  dd¡ S )Nr=   r   )r   r   rŸ   r    r¡   )r¢   r   r   r   ÚendOfDay‡  s    r¥   c             C   s   t   | j| j| j¡S )N)r   rŸ   r    r¡   )r¢   r   r   r   Ú
startOfDayŒ  s    r¦   c             C   s@   | d d d |d d  | d d |d | d  | }|S )NiÐ  é   é   r=   i€Q é<   r   )ÚyÚmr¢   ZhourÚminZsecZttr   r   r   Ú
encodeTime  s    <r­   c             C   st   | d }| d } | d }| d } | d }| d } | d d }| d } | d }| d } | d }d||d ||||f S )Nr©   é   r¨   r=   r§   iÐ  z%04d-%02d-%02d %02d:%02d:%02dr   )ÚtÚtm_secÚtm_minÚtm_hourÚtm_mdayÚtm_monÚtm_yearr   r   r   ÚdecodeTimeInt–  s    r¶   c             C   sD   t | d ƒt | d ƒt | d ƒt | d ƒd  d  d  }t|ƒS )Nr   r=   rA   é   é   )Úordr¶   )r“   r¯   r   r   r   Ú
decodeTime¥  s    (rº   c             C   s$   g }x| D ]}|r
|  |¡ q
W |S )N)r0   )ÚlÚrrK   r   r   r   ÚpackList¯  s
    
r½   c             C   s8   t j tjd¡}yt  |¡ W n tk
r2   Y nX |S )NZtemp)r   r   r8   r   r   r   r   )Zchildwithdayr   r   r   r   ÚtempDir·  s    r¾   c             C   sÄ   dt ƒ | f }t||rdpdƒ^}y| |¡ W n> tk
rn   y| | d¡¡ W n tk
rh   Y nX Y nX | d¡ W d Q R X y.tj |¡}d}||kr°t|dƒ}| ¡  W n   Y nX |S )Nz%s/%sza+zw+zutf-8rN   i   rP   )	r¾   r+   r-   r   r,   r   r   rQ   rR   )rW   r/   r0   r1   r2   rT   rU   r   r   r   ÚtempFileÁ  s&    
r¿   c             C   s@   ddl m} yt |jtj| f ¡ W n tk
r:   Y nX d S )Nr   )Ú	cache_key)Zmysite.iclockrÀ   r   ÚdeleteZTERMINAL_WITHOUT_CMDr   ÚUNITr   )ÚidrÀ   r   r   r   ÚdeviceHasCmdØ  s
    rÄ   c             C   sJ   dt j| |f }|r2tj |¡\}}d|||f }| dd¡ dd¡ |S )Nz%s%s/%sz%s_%s%sz\\ú/z//)r   r   r   r   Úsplitextro   )rS   rÃ   ÚfnameÚextr   r   r   ÚgetStoredFileNameà  s    rÉ   c             C   s2   d| |f }|r.t j |¡\}}d|||f }|S )Nz/iclock/file/%s/%sz%s_%s%s)r   r   rÆ   )rS   rÃ   rÇ   rÈ   r   r   r   ÚgetStoredFileURLé  s
    rÊ   c             C   s$   | dkrt d||ƒS t d|  ||ƒS )NrB   Úuploadzupload/)rÉ   )rS   rÃ   rÇ   r   r   r   ÚgetUploadFileNameñ  s    rÌ   c             C   s$   | dkrt d||ƒS t d|  ||ƒS )NrB   rË   zupload/)rÊ   )rS   rÃ   rÇ   r   r   r   ÚgetUploadFileURL÷  s    rÍ   c          	   C   s@   t | ƒ} tdtt| d d… ƒƒd t| dd … ƒ¡f dƒ}|S )Nz%s%séûÿÿÿz{:04x}r@   )r–   rv   ÚhexÚformat)ÚcardÚcr   r   r   Úcard8To10Numý  s    rÓ   c             C   sP   t t| ƒƒ}|dd… }|dd… }dd t|dƒ¡d td| dƒ¡f }|S )rB   éüÿÿÿNz%s%sz{:0>3}r@   z{:0>5}Ú0x)rÏ   rv   rÐ   )rÑ   ZhcZc4Zc2rÒ   r   r   r   Úcard10To8Num  s    rÖ   c             C   s`   dd  ttt| ƒƒƒdd … ¡ } d| dd… | dd… | dd… | dd… f }t|d	ƒ}|S )
Nz%sz{:0>8}rA   z
0x%s%s%s%sé   é   é   r   r@   )rÐ   r–   rÏ   rv   )rÑ   ÚhÚtemp_lr   r   r   ÚcardHTOL  s    "0
rÜ   c             C   s8   |sdS t | dƒr0| jdkr0ttd| dƒƒ}n|}|S )z  rB   ÚMulCardUserr=   rÕ   r@   )ÚhasattrrÝ   r–   rv   )ZdeviceZcardnorÑ   r   r   r   Ú
get_cardno  s    rß   c             C   s  ydd l m} W n tk
r$   d S X |  d¡}|j}t|d |d ƒ}| ||f|j¡}| d||fd¡}| 	¡ }| 	¡ }t
|d ƒ}xxt|ƒD ]l}	xft|ƒD ]Z}
t|	| d ƒ}t|
| d ƒ}t|dƒt|dƒ }|t|dƒkr ||	|
f ||	|
f< q W q’W |S )Nr   ZRGBAr=   )éÿ   rà   rà   r   rA   g      à?)Ú	PIL.ImageÚImager   ZconvertÚsizer¬   ÚresizeÚ	ANTIALIASÚnewÚloadÚfloatrD   ÚabsÚpow)Úimgrâ   Zimarã   Zr2ZimbZpimaZpimbr¼   rK   ÚjZlxZlyrÛ   r   r   r   Ú	circlePic   s(    
rí   c             C   s`   d| ksXd| ksXd| ksXd| ksXd| ksXd| ksXd| ksXd| ksXd	| ksXd
| ksXd| kr\dS dS )NZ1iclock_transaction_emp_code_company_id_punch_timeZconflictÚ_uniqZ	integrityZSQL0803Nr	   ZUNIQUEzare not uniquezDuplicate entryzunique constraintzduplicate keyTFr   )Zestrr   r   r   ÚisDBDuplicate;  s     rï   c             C   s0   yt  d| | f ¡ W n tk
r*   Y nX d S )Nz!cmd /C net stop %s & net start %s)r   Úsystemr   )ZsvrNamer   r   r   Ú
restartSvrD  s    rñ   c          	   C   s~   i }xt|   d¡D ]f}|r(|  d¡d }n|}|  dd¡}t|ƒdkryd|d  }|||d < W q tk
rt   Y qX qW |S )NrN   rn   r   ú=r=   z%s)rC   rE   r   )r“   r¢   ÚlineÚvZnvr   r   r   ÚsetValueDicK  s    
rõ   r   c             C   sf   i }| rb|   dd¡  dd¡} |  |¡}x:|D ]2}|r,| d¡}|t|d ƒd d… ||d < q,W |S )zb
    :param rawData:pin=1	name=test
    :param splitfmt:
    :return: {'pin':1,'name':'test'}
    rn   rB   rN   rò   r   r=   N)ro   rC   rE   )ZrawDataZsplitfmtr¢   ró   r¯   Zllr   r   r   Ú
lineToDict\  s    


$rö   c             C   s:   t |  d¡ƒ}t t | j| jd¡ d¡ƒ}|| d }|S )Nz%Wr=   )rv   r*   r   rŸ   r    )ZnowTimeÚendZbeginZweekr   r   r   ÚGetWeekInMonthn  s
    rø   c             C   s   t   | j| j| jddd¡S )Nr   )r   rŸ   r    r¡   )ÚDTimer   r   r   Útruncv  s    rú   c             C   s   t   | j| j| jddd¡S )Né   é;   )r   rŸ   r    r¡   )rù   r   r   r   Ú	truncTimez  s    rý   c             C   s^   g }|p
g }|pt }y | ¡ }| | |¡ | ¡ }W n$ tk
rX   dd l}| ¡  Y nX |S )Nr   )r   ÚcursorÚexecuteZfetchoner   rd   re   )ÚsqlÚparamsÚconnÚrowrþ   rd   r   r   r   Úcustom_sql_query_one~  s    r  c             C   sN   |pg }|pt }y | ¡ }| | |¡ | ¡ }W n tk
rH   g }Y nX |S )N)r   rþ   rÿ   Úfetchallr   )r   r  r  rþ   Úrowsr   r   r   Úcustom_sql_queryŒ  s    
r  c             C   sV   |pg }|pt }y | ¡ }| | |¡ | ¡ }W n tk
rL   d }g }Y nX ||fS )N)r   rþ   rÿ   r  r   )r   r  r  rþ   r  r   r   r   Úcustom_sql_query_adv˜  s    
r  c             C   sœ   d }|p
g }|pt }z2y| ¡ }| | |¡ W n tk
rB   Y nX W d |r–|r–y| ¡  W n0 tk
rŒ } ztd |¡ƒ W d d }~X Y nX | ¡  X |S )Nz1support for enterprise version create company: {})r   rþ   rÿ   r   Úcommitr.   rÐ   rR   )r   r  Úactionr  rþ   r3   r   r   r   Ú	customSql¥  s    
 
r  c             C   sV   d }|rt | }| ¡ }nt}| ¡ }z| | |¡}W d |rP|rP| ¡  | ¡  X |S )N)r   rþ   r   rÿ   r	  rR   )r   r  r
  ZconnDBrþ   r  r¯   r   r   r   ÚcustomSqlEx¸  s    

r  c          
   C   s²   y€| dkr |dkr d}| |f}nP|dkr<| dkr<d}|f}n4|dkrX| dkrXd}| f}n|dkrp| dkrpd}d}t ||dd W n, tk
r¬ } ztd	|ƒ W d d }~X Y nX d S )
Nrk   zHdelete from iclock_terminalemployee where emp_code=%s and terminal_sn=%sz8delete from iclock_terminalemployee where terminal_sn=%sz5delete from iclock_terminalemployee where emp_code=%sz#delete from iclock_terminalemployeer   T)r
  ÚdelEmpInDevice)r  r   r.   )r_   rS   r   r  r3   r   r   r   r  Ó  s"    

r  c             C   s   t | |||||ƒS )N)Úsave_cmd)rÃ   ZcmdStrÚcommit_timeÚnotifyr	  Úactive_asyncr   r   r   ÚsaveCmdé  s    r  c          
   C   sB  |r| sdS ddl m} |s&tj ¡ }|dkrôy˜|dkrL|jj| |dd}n|jj| ddd	d
gdd}x\|D ]T}|jsŠ|j|krÀ| ¡  ql|j|krl||j  	¡ dk rl|j
dkr´dS |dkrldS qlW W n, tk
rò }	 ztd|	ƒ W dd}	~	X Y nX | ||ptj ¡ dœ}
|jjf |
Ž}d}y
|j}W n   Y nX t| ƒ |S )zZ
        id:device id
        cmdStr:cmd content
        cmdTime:cmd execute time
        éþÿÿÿr   )ÚTerminalCommand)z	CHECK ALLÚCHECKzCHECK OPz	CHECK LOGÚINFOz	CHECK ALLT)Úterminal_idZcontent__exactÚreturn_value__isnullr  zCHECK OPz	CHECK LOG)r  Zcontent__inr  é(   éýÿÿÿrÔ   r  N)r  r€   r  rk   )Zmysite.iclock.modelsr  r   r   ÚobjectsÚfilterZtransfer_timer  rÁ   Ztotal_secondsr€   r   r.   ÚcreaterÃ   rÄ   )rÃ   Úcmdr  r  r	  r  r  Zcmd_objsZcmd_objr3   ZdDictr   Zret_idr   r   r   r  í  s@    





r  c             C   s®   | sdS d| ksd|kr0|   dd¡ |  dd¡ |  d¡}t|ƒdk rt| d¡}t|d ƒdkrtt|d ƒdkrtdS | d¡}d d	d
„ |D ƒ¡}d dd
„ |D ƒ¡}||kS )zž
    Judge the supported functions according to the PUSH version of the device
    :param pushs: PUSH version of the device
    :param vers:
    :return:
    Fz.aspxrB   Ú.r·   r   rA   r=   c             s   s   | ]}d   |¡V  qdS )z{:0>2}N)rÐ   )Ú.0Úxr   r   r   ú	<genexpr>2  s    z!DevIdentity_ex.<locals>.<genexpr>c             s   s   | ]}d   |¡V  qdS )z{:0>2}N)rÐ   )r   r!  r   r   r   r"  3  s    )ro   rC   rE   rv   r8   )ZpushsZversZpushlZvers1ZverlZpsZvsr   r   r   ÚDevIdentity_ex  s    

 
r#  c       	      C   sÂ   ydd l }|  ¡ }W n   dd l}| ¡ }Y nX dd l}|j|jjd}| | ¡ |jdd | 	¡ }| 
|¡ dd lm} | d¡ | |¡}| d|j¡}ttjd ƒ | 
tjd ¡ d S )Nr   )Zerror_correctionT)Zfit)éd   r$  Úqrcodezqrcode/register.png)ÚStringIOÚioÚBytesIOr%  ZQRCodeZ	constantsZERROR_CORRECT_LZadd_dataZmakeZ
make_imageÚsaverá   râ   Úseekr+   rä   rå   r$   r   r   )	r€   r&  Úoutputr'  r%  Zqrrë   ZImgZimr   r   r   ÚcreateQrcode7  s&    



r,  c             C   s   ddl m} || |dS )Nr   )Úreverse)r‰   )Zdjango.core.urlresolversr-  )Z	view_namer  r-  r   r   r   Úget_urlP  s    r.  c                   s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú	Singletonc                s(   t t| ƒ |||¡ t t| ƒ ¡ | _d S )N)Úsuperr/  Ú__init__Ú__call__Ú	_instance)ÚclsrW   ÚbasesÚmembers)Ú	__class__r   r   r1  W  s    zSingleton.__init__c             O   s   | j S )N)r3  )r4  ÚargsÚkwr   r   r   r2  [  s    zSingleton.__call__)r   r‘   r’   r1  r2  Ú__classcell__r   r   )r7  r   r/  U  s   r/  c             C   sx   | sdS yFt t| ƒƒ}d|d@ |d? d@ |d? d@ |d? d@ |d? d@ f } W n$ tk
rr   | d d… d	 } Y nX | S )
NrB   z[%02X%02X%02X%02X%02X]rà   rØ   r@   r®   é    r  z00])rv   r–   r   )rÑ   Únumr   r   r   ÚgetNormalCard_  s    8r=  c              C   sX   ddl m}  t dd¡}|r |S | jjdd ¡ }|s:dS t |j	¡}t 
d|d¡ |S )z0
    Getting auxiliary setting
    :return:
    r   )ÚSystemSettingÚauxiliary_settingN)rW   i€:	 )Úmysite.base.modelsr>  r   rˆ   r  r  Úfirstrƒ   r•   r   Úset)r>  r?  r   r   r   r   Úget_auxiliary_settingk  s    rC  c             C   sª   ddl m} | sdS dtj| t|ƒf }t |d¡}|r<|S |dk	rHdS |jj| |d 	¡ }d}|rp|j
rp|j
}yt |¡}W n   |}Y nX t ||d¡ |r¦|S dS )z½
    Getting system setting(System -> Configuration)
    :param setting_name: email_setting, auxiliary_setting, ...
    :param company_id: id for a company str conclud '-'
    :return:
    r   )r>  Nz%s_%s_%s)rW   Ú
company_idz{}i€Q )r@  r>  r   rÂ   r–   r   rˆ   r  r  rA  r   rƒ   r•   rB  )Zsetting_namerD  r>  rÀ   Úsys_settingr   Z
db_settingr   r   r   Úget_system_setting|  s*    

rF  c              C   s\   ddl m}  d}t |d ¡}|r$|S | jj|d ¡ }|s>d S t |j	¡}t 
||d¡ |S )Nr   )r>  Zzklicense_email)rW   i€:	 )r@  r>  r   rˆ   r  r  rA  rƒ   r•   r   rB  )r>  rÀ   rE  r   r   r   r   Úget_zklicense_email   s    rG  c             C   s*   t j tj| ¡}t j |¡s&t  |¡ |S )z§
    Getting the path of folder under files folder, generating the folder if the folder not exists.
    :param folder: folder name
    :return: The path of folder
    )r   r   r8   r   r   r9   r   )Zfolderr7   r   r   r   Úget_or_create_folder®  s    
rH  r·   c       (      C   s  dd l }ddlm} ddlm} ddlm}	 ddlm}
 ddl	m
} ddlm} |jj| jd}tj d	|j¡}t|ƒ}tj d
|j¡}t|ƒ}dj|  ¡ d}tj ||¡}|sÊtj |¡rÊ|dkrÊd S tj |dj| ¡ d¡}tj |dj| ¡ d¡}tj |dj| ¡ d¡}t|dƒ}| | ¡ ¡ W d Q R X |
||ƒ y2|	||ƒ\}}|dk sf|rv|d|dƒ ƒ‚W nh tk
rà } zHy"t |¡ t |¡ t |¡ W n tk
rÄ   Y nX |sÐ|‚W d d }~X Y nX d}tj ¡ }dj| ¡ d}|dkrf| j j!|d}|r`|r`yt tj || "¡ j#¡¡ W n   Y nX |j$||d nd}n8| j j!dd}|rš|rš|dkrš|j$||d nd}|rò| j j%} | | | j&| j'||t(|ƒd d… d}!|dkræ||!_)||!_*|!j+dd t, -|tj ||¡¡ |dkrÆt, -|tj ||¡¡ tdƒ}"tj |"|¡}#tj .|#¡sˆ| |¡}$|$j/\}%}&|%dkrˆ|&dkrˆ|$ 0d¡}'|' +|#¡ yt tj ||¡¡ W n$ tk
rÄ } zW d d }~X Y nX y"t |¡ t |¡ t |¡ W n$ tk
r } zW d d }~X Y nX d S ) Nr   )râ   )Úgettext_lazy)Úcrop)Úadjust_orientation)ÚAdminRuntimeWarning)ÚCompany)rÃ   ÚregisterZbiophotoz	{pin}.jpg)r_   )r=   r·   z
{uuid}.jpg)Úuuidrh   z%sZ)save_photo_failed_please_check_your_photoF)Úapproval_state)Úregister_photoÚremarkT)Zapproval_state__in)Úapproval_photoÚapproval_timer$  )ZemployeeÚ
first_nameÚ	last_namerQ  rP  rR  )Zforce_insertÚphotoi@  éð   )i@  rX  )1rO  ZPILrâ   Zdjango.utils.translationrI  Zmysite.core.zkcropfacerJ  Zmysite.tools.image_utilsrK  Zmysite.admin.exceptionsrL  Zmysite.cloud.modelsrM  r  rˆ   rD  r   r   r8   Zhex_idrH  rÐ   r_   r9   Zuuid4r+   r-   Úreadr   rt   r   r   Zbiophoto_setr  rA  rQ  ÚupdateZmodelrU  rV  r–   rS  rT  r)  ÚshutilÚcopyÚisfilerã   rä   )(ZemprW  rP  rR  Z	overwriteZignore_errorrO  râ   Ú_rJ  rK  rL  rM  ZcompanyZrp_pathZrpZbio_pathZ	store_dirrS  Zapproval_photo_pathZoriginal_imgZcorp_imgZorientated_imgZorfr   Z	is_rotater3   Zadd_newÚntrQ  Zapproval_objsZobjsr4  r   Zphoto_store_dirZuser_photo_pathrë   Zimg_wZimg_hZ	small_imgr   r   r   Úsave_bio_photoº  s¨    














r`  c                s   ddl m‰  ‡ ‡fdd„}|S )Nr   )r   c           
      sN   ˆ| |Ž}yˆ   ¡  ˆ  ¡  W n* tk
rH } zt|ƒ W d d }~X Y nX |S )N)r	  rR   r   r.   )r8  r‰   r   r3   )r   Úfuncr   r   Úwrapper  s    
z$close_db_connection.<locals>.wrapper)Ú	django.dbr   )ra  rb  r   )r   ra  r   Úclose_db_connection  s    	rd  c             C   sR   | j  dd¡}|s | j  dd¡}|s2| j  dd¡}td | d¡ƒ}|rN|d S dS )NZHTTP_X_FORWARDED_FORrB   ZHTTP_X_REAL_IPra   ú,r   )rc   rˆ   r  rC   )rf   Zforwards_strZforwardsr   r   r   Úget_real_ip'  s    rf  c             C   s|   |dkrd}d}t |ƒ}|r d}tjdkr.d}xH|rvt |ƒ}||kr`|d|… ||d…  }}n|}d}| j |¡ q0W dS )zcoracle can't bulk_create too many data in once,
       So that we create data 200 in one time.
    NéÈ   FT)Zoracler=   r   )rE   r   ZDATABASE_ENGINEr  Zbulk_create)Z
model_nameZdatasZ	save_sizeZ
exist_restr<  Zoperate_datar   r   r   Úloop_bulk_create3  s    
rh  c               @   s   e Zd Zdd„ ZdS )ÚUUIDEncoderc             C   s   t |tƒr|jS tj | |¡S )N)r|   r   rÏ   rƒ   r‹   rŽ   )r   r   r   r   r   rŽ   J  s    
zUUIDEncoder.defaultN)r   r‘   r’   rŽ   r   r   r   r   ri  I  s   ri  )N)N)T)r7   )TF)r=   )T)T)T)r[   T)r[   T)N)rx   )Nrx   rB   )N)T)T)r   )NN)NN)NN)NTN)NTFT)NTFT)N)r·   rB   TF)N)or   rƒ   r   r[  rF   rd   rO  r   Zdjango.confr   Zdjango.core.cacher   rc  r   r   r   r   r	   Zdjango.httpr
   Zdjango.utils.encodingr   r   r   r    r"   r$   r%   r&   r'   r(   r4   r5   r6   r;   rM   rO   rV   rX   rY   rZ   r^   r`   rg   rj   rm   rp   rw   rz   r‚   r…   r‡   rŠ   r‹   r„   r   r”   ZDEFAULT_CHARSETr•   rž   r£   r¤   r¥   r¦   r­   r¶   rº   r½   r¾   r¿   rÄ   rÉ   rÊ   rÌ   rÍ   rÓ   rÖ   rÜ   rß   rí   rï   rñ   rõ   rö   rø   rú   rý   r  r  r  r  r  r  r  r  r#  r,  r.  Útyper/  r=  rC  ZDEFAULT_COMPANY_IDrF  rG  rH  r`  rd  rf  rh  ri  r   r   r   r   Ú<module>   sÂ   

	

















	
	






1

$
^
