B
    Zc|              (   @   s  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mZ d dl	m
Z
 d dlmZ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! d dl"m#Z#m$Z$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l0m1Z1m2Z2 e
dd Z3e
dd Z4dd Z5e
dd Z6e
dd Z7e
d d! Z8d"d# Z9dvd$d%Z:e
d&d' Z;e
d(d) Z<ed*dwd+d,Z=e
d-d. Z>e
d/d0 Z?e
d1d2 Z@e
d3d4 ZAe
d5d6 ZBe
d7d8 ZCe
d9d: ZDd;d< ZEed=e3dd>ed?e6dd>ed@e8d!d>edAe7dd>edBe:d%d>edCe;d'd>edDe<d)d>edEe!jFdFd>edGe!jGdHd>edIe!jHdFd>edJe!jIdKd>edLe!jJdMd>edNe!jKdOd>edPe!jLdQd>edRe!jMdSd>edTe!jNdUd>edVe9dWd>edXeejOdYdZed[ed\d]d^ed_e#d`d>edae$dbd>edce%ddd>edee=d,d>edfe>d.d>edge?d0d>edhe@d2d>ed4eAd4d>ed6eBd6d>ed8eCd8d>edieDdjd>edke!jFdld>edme!jGdnd>edoe!jHdld>edpe!jIdqd>edre!jNdsd>edte!jJdud>g$ZPdS )x    N)
itemgetter)urlinclude)login_required)HttpResponseHttpResponseForbidden)	force_str)gettext_lazy)gettext)settings)serve)TemplateResponse)redirect)JsonResponse)inject_default_context)devview)card_detail	card_base	card_temp)check_use_warn_tempcheck_use_high_temp)Products)QCount)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc       8      C   s  dd l }ddlm}m}m}m}m} ddlm} ddl	m
} ddlm}	 ddlm}
m} ddlm} ddlm} |d | jjd	}d
d |D }t|}t|}d}d}tj }| jdd}|d}yt|d }W n   Y nX yt|d }W n   Y nX tj }|tjdd }| jj}| j}|
j j!||" d#d}|j$rj|j j!||" d#d}n(dd |% D }|j j!||d#d}|j&r|j'j(}|j)}|j!||j)d}|j!|j)d}n| jj}|j!|d}|j!|d}| jj*+ r|j!| jj*% d}| jj+ rr| jjj,ddd} |j-. dkrb|	j j!| dj,ddd}!|j!|!d}n|j!| d/ }| jj0+ r|j!| jj0% d }t1t2|d!}"|"d"kr|!t3t4d#t3d d#B t3t5d#B }|6 s|6 st7t89g |d$S |d d% }|dkr"|d d }n|d d% }|:dd&d'd(d)d*d+d,d-d)
}#|:dd&d.d'd(d)d*d+d,d-d)}$|$r~|$d d }%|%}|#r|#d d }&|&}g }'d/||f }(t;<|$|#}$t|  })t=|$}$|$j>t?d'dd0 x.|$D ]$}*|*d' @d1}+d2 },}-d2|*d3< d2|*d4< d2|*d5< |*d& r6|*d& d"kr6|*d& |*d3< d.|*krL|*d. |*d4< d2|*d6< |*d* rfd7|*d5< |*d) r|*d) |*d6< d8|*d5< d9At1|Bdd2|*d3 }.tCjD+tCjDE|jF|.rd:jA|.|)d;},|*d( }/yt|/}/W n tGk
r   Y nX tHd<|*d=< |*d, rjdd>lImJ}0 |*d, }1| jj}2|0|1|2}1tK|1|2}3|3rNtHd?|*d=< ntL|1|2}4|4rjtHd@|*d=< |*MdA|*d' @dBi d2}5|*d6 rd6}5|*MdCt1|*d' N dDd dE n`|*d+ rdF}5|*M|*d* BdGd|*d' @dHdE n*d2}5|*M|*d* BdGd|*d' @dHdE dIjAf |*}6tCjD+tCjDE|jF|6rLdJA|6}-|*d, r~dd>lImJ}0 |*d, }1| jj}2|0|1|2}7n|*d, }7|'O|*d |*d3 |*d4 |+tP|t1|/t1|/|-|,|*d6 p|*d+ |*d5 pd2t1|7pd2t1|*d= pd2|5t1|*d- f qW t7t89|'|(d$S )KNr   )CaseWhenValue	CharField	TextField)Cast)r   )Employee)Transaction
Unregister)Company)get_func_key)key
company_idc             S   s   g | ]}|d  |d fqS )r       ).0Zchoicer+   r+   +G:\easytimepro\master/mysite/iclock\urls.py
<listcomp>-   s    z)dashboard_transaction.<locals>.<listcomp>Zbpz0-0-r*   )days)pk__gtZpunch_time__gtez-punch_timez-idc             S   s   g | ]}t |qS r+   )str)r,   xr+   r+   r-   r.   G   s    )r1   Zarea_alias__in)empr)   )r)   )emp__department__inidT)Zflat)Zoracle)Zarea__id__in)Zemp__id__in)Zemp__area__id__in)emp__position__in
resign_emp0)emp__status)datascore   emp_code
punch_timepunch_stateZgps_locationterminal_snZterminal_aliasZtemperatureZ	mask_flagZemp__first_namez%s-%s)r(   reversez%H:%M:%S ZpinZemp_nameiconlocationz/media/images/device.pngz/media/images/location.pngzphoto/{0}/{1}.jpgz/files/{file}?_={stamp})filestampZdashboard_normalZtemp_status)temperature_updateZdashboard_high_tempZdashboard_warningZmonthz%Y%mZApp.)rA   datetimedevice:z%Y%m%d%H%M%Sz1upload/{month}/{terminal_sn}/{datetime}-{pin}.jpgz
/files/{0})Qtimedjango.db.modelsr   r   r   r    r!   Zdjango.db.models.functionsr"   mysiter   mysite.personnel.modelsr#   mysite.iclock.modelsr$   r%   Zmysite.cloud.modelsr&   Zmysite.att.att_paramr'   usercurrent_companytupledictrJ   nowPOSTgetsplitint	timedeltaget_auth_areaobjectsfilterdateorder_byis_superuserallis_employee
departmentcompanyr6   get_auth_deptexistsZvalues_listZDATABASE_ENGINElowerdistinctget_auth_posr2   r   r   r   r   countr   jsondumpsvalues	itertoolschainlistsortr   strftimeformatreplaceospathjoinADDITION_FILE_ROOT	Exception_mysite.att.utilsrH   r   r   updateZ	timestampappendr   )8requestrM   r   r   r   r    r!   r"   r   r#   r$   r%   r&   r'   choicesZdata_valuesZtuple_values_without_emptystateZunregister_bpZtransaction_bpntZbpsZbplrV   next_day	auth_arearR   querysetZunregistered_users_queryset	area_namere   Z	companyIdareasZ	area_empsr8   Zunregistered_datar;   Zmax_transaction_bpZmax_unregister_bpZlogsr<   rG   tr?   ZphotoZcaptureZ_photor@   rH   Zcelsiusr)   Zuse_high_tempZuse_warn_temprD   Z_captureZtemperature_based_on_unitr+   r+   r-   dashboard_transaction"   s(   



 










(


* 4r   c             C   s  ddl m} ddlm} tj }|tjdd }| j}|jrpd}|j	j
|| | gdd  }n|j	j
| jjd}|j	j
| jjd	j
| | gd
}	| jjsNi }
i }| jj}| jj}| jj}| r| |
d< | |d< | r| |
d< | |d< | r6| |
d< | |d< |	j
f |
}	|j
f |}|	j
|d}	|	d d}	|	 }| }dtd dtd dddtd dtd gid|| dtd d|dtd dgdgd}tt|S )Nr   )r#   )r$   r*   )r0   )r4   punch_time__ranger>   )r)   )emp__company_id)r   r5   Zdepartment__inemp__area__inarea__inr7   Zposition__in)Zemp__inz%sZchart_present_totalZchart_today)textsubtextr;   chart_absentZchart_presentrC   )valuename)r   r;   )titlelegendseries)rP   r#   rQ   r$   rJ   rV   r[   rR   rc   r]   r^   r_   rn   ri   rk   rS   ra   r\   rf   rj   rg   rb   r`   r{   r   rl   rm   )r   r#   r$   rV   r   rR   totalZpresentZemp_querysetr   filtersZemp_filtersr   	auth_deptauth_posr;   r+   r+   r-   dashboard_present   sP    
(



r   c       	      C   s   ddl m} ddlm} tj }|dd}|dd }|sR| tjdd }| |krv|j	dkrv|j
d	krvd
}|r| rtjd|tjdd d d}tjd|tjdd d d}|| || |dd | }|d| d S )Nr   )cache)att_calculatecalculate_refreshFZdashboard_calculate)r0   r=   Tz%s 00:00:00iz%Y-%m-%dz%Y-%m-%d %H:%M:%Sr*   )django.core.cacher   Zmysite.att.calc.viewsr   rJ   rV   rX   r_   r[   ZhourZminutestrptimers   set)	Zemp_idsr   r   Zdt_nowr   Zlast_calculateZd1Zd2Zcalculate_dater+   r+   r-   	calculate+  s&    
 r   c          	      s  ddl m}m}m}m}m} ddlm} tj	 }|tj
dd |jj | d}| jjr| jjjj}	|j| j|	d}n| jj}	|j|	d}| jjsi }
| jj}| jj}| jj}| r| |
d	< | r| |
d
< | r| |
d< |jf |
 }tt|	d}|dkrH|ttdtd dB tt dB }|!d"d}|j#|||d|dd|ddd|ddd|||d|dd|ddd|ddd|||d|dd|ddd|dddd}dd |D  fddt$dD } fdd|D t%fdd|D  }t&|}t't(dt't(dd d!t't(d"t't(d#t't(d$gid!|d id%t(d" |d d&d%t(d# |d' d&d%t(d$ |d( d&gd)}t)t*+|S )*Nr   )r   r   Sumr   IntegerField)PayloadBaser=   )r0   )Zatt_date__gteZatt_date__lt)r4   r   )r   r5   r   r7   r8   r9   )r:   att_dater*   )Zlate__gtthen)default)Zoutput_field)Zearly_leave__gtr   )Z
absent__gtr   )sum_latesum_early_leave
sum_absentc             S   s   i | ]}||d   dqS )r   z%Y-%m-%d)rs   )r,   rr+   r+   r-   
<dictcomp>j  s    z'dashboard_exception.<locals>.<dictcomp>c                s"   g | ]} t j|d  dqS ))r0   z%Y-%m-%d)rJ   r[   rs   )r,   r3   )
start_dater+   r-   r.   k  s    z'dashboard_exception.<locals>.<listcomp>   c          	      s"   i | ]}  |d d d d|qS )r   )r   r   r   )rX   )r,   h)
db_payloadr+   r-   r   l  s    c                s0   g | ](}| | d   | d  | d gqS )r   r   r   r+   )r,   r   )payloadr+   r-   r.   m  s   dashboard_exceptionZdashboard_history)r   r   r;   Z
chart_lateZchart_early_leaver   z%s)r   r;         )r   r   xAxisr   ),rN   r   r   r   r   r   Zmysite.att.modelsr   rJ   rV   r[   r]   r^   r_   rR   rc   rd   re   r6   rS   ra   rf   r\   rj   rg   rb   ri   r2   r   rX   r   r   r   rn   r`   annotaterangeziprq   r   r{   r   rl   rm   )r   r   r   r   r   r   r   rV   r   r)   r   r   r   r   r8   Zheadersdatasetr;   r+   )r   r   r   r-   r   A  sl    


 

$





r   c          
   C   s  ddl m} | j}|jr |j}n|j}|jj|d}|jsZ|j	
 rZ|j|j	 d }d}x$|D ]}| }|dkrd|d7 }qdW |}| }	|	| }
ttddd	d
ttdttdgid|ttdddddd|
ttddddddgdgd}tt|S )Nr   )Terminal)r)   )r   )r*   r      r*   dashboard_device_statusrC   )r   r   r;   Zdashboard_device_onlineZdashboard_device_offlinez#32CD32d   zrgba(0, 0, 0, 0.5))ZcolorZ
shadowBlurZshadowColor)r   r   Z	itemStylez#FF6347)r   r;   )r   r   r   )#mysite.iclock.models.model_terminalr   rR   rc   r)   rS   r]   r^   ra   r\   rg   rb   ri   getDynStaterk   r   r{   r   rl   rm   )r   r   rR   current_company_iddevice_queryrk   rK   Zdevice_stateZonline_device_countdevice_countZoffline_device_countr;   r+   r+   r-   r     s4    


r   c       
      C   s  dd l }dd l}ddlm} ddlm} | jdkr| jjrNdj	| jj
d}ndj	| jjd}|j  }||d pvi }|rt||d   d	kr|j| j| |d
i }ddj	tddiddj	tddgid|dg idj	tdd|dg dgd}	t||	S d S )Nr   )r   )tasksGETzdashboard_monitor_emp_{id})r6   zdashboard_monitor_user_{id}rG   <   r   r   z{title}Zdashboard_real_time_monitor)r   r;   z{legend}Zsymbol_p)r   Zheadsr   )r   r;   )r   r   r   r   )rJ   rl   r   r   Zmysite.baser   methodrR   rc   rt   r6   rS   rV   rX   absZtotal_secondsZdashboard_requestZdelayr{   r   rm   )
r   rJ   rl   r   r   Z	cache_keyrV   r   r   responser+   r+   r-   dashboard_monitor  s$    
$r   c          	   C   s   dd l }ddlm} | jdd}| jdd}||dkrF|dS ttj	t
j|ddd	}|| }W d Q R X ||d
d}|S )Nr   )r   ZSNrC   r   r   Errorzfile/rbz
text/plain)Zcontent_type)base64django.http.responser   r   rX   findopenrv   rw   rx   r   ry   ru   Z	b64encoderead)r   r   r   sn	file_pathfZbuffr   r+   r+   r-   
upgrade_fw  s     r   c             C   sZ   ddl m} ddlm} |jj| jjd }|s6i }| }|	|j
|d t| d|S )Nr   )DeviceConfig)DeviceConfigurationForm)r)   )uuidformziclock/configuration.html)rQ   r   Zmysite.iclock.formsr   r]   r^   rR   rS   firstr}   r   r   )r   contextr   r   Zdcr   r+   r+   r-   device_config  s    r   c          
   C   s^   | j dd }|st S yt|}W n$ tk
rH } zt S d }~X Y nX d|i}t| d|S )N_idobjz iclock/terminal/pending_cmd.html)r   rX   r   rZ   rz   r   )r   r   er   r+   r+   r-   pending_cmd*  s    r   c          
   C   s   ddl m} | jdd }|s$t S yt|}W n$ tk
rT } zt S d }~X Y nX |jj|d	 }|srt S d|j
ji}t| d|S )Nr   )r   r   )r6   r   z#iclock/terminal/area_employees.html)rQ   r   r   rX   r   rZ   rz   r]   r^   r   areaZpkr   )r   r   r   r   r   r   r+   r+   r-   area_employees9  s    r   rG   c             C   s   t | d|S )Nzmobile/gpsforemployee/map.html)r   )r   r   r+   r+   r-   get_locationL  s    r   c             C   s   ddl m} | jjr| jj}n| jj}tj }|jj	||
 dddddd}t|}x|D ]}t|d |d< qdW tt|S )Nr   )Events)r)   Zevent_time__date__gteZeventZ	organizer
event_timerE   )rQ   r   rR   rc   r)   rS   rJ   rV   r]   r^   r_   rn   r`   rq   r2   r   rl   rm   )r   r   r)   r   ZeventsZ
event_datar3   r+   r+   r-   dashboard_eventsQ  s    


r   c             C   sh  ddl m} ddlm}m} | j}|jr6tt	g S |j
}|jj|d}d}d}d}	dddg}
|djtddjdd}d	d
 |D }|t|d}g }x>|D ]4}|d7 }|jr||jst }|jd d |d< | }|dkr
d|d< d|d< |d7 }nd|d< d|d< |	d7 }	|j|d< |jrD|jdd nd|d< |jrZ|jnd|d< |jrp|jnd|d< |jr|jnd|d< |jr|jnd|d< |jr|jnd|d< d|d< |||j| || qW xR|D ]H}|d }|r||st }|j|d}dd
 |D |d< dd
 |D |d< d|d< g }xN|D ]F}|d7 }| }|dkr|d |d7 }n|d |	d7 }	qPW ||d< d d
 |D |d< d!d
 |D |d< d"d
 |D |d< d#d
 |D |d< d$d
 |D |d< d%d
 |D |d< |d |d< ||| || qW ||
d< |	|
d< ||
d&< |
|d'}tt	|S )(Nr   )r   )convert_ip2geolocationcheck_ip_is_private)r)   
ip_address)rk   r*   )Z	count__gtc             S   s   g | ]}|d  qS )r   r+   )r,   dr+   r+   r-   r.   w  s    z-dashboard_device_location.<locals>.<listcomp>)Zip_address__in   alias)r*   r   r   statusZOnlineZdevice_statusZOffliner   r/   Zpush_version
user_countZfinger_print_countZfinger_vein_count
face_count
palm_countrk   )r   c             S   s   g | ]}|j d d qS )Nr   )r   )r,   r   r+   r+   r-   r.     s    c             S   s   g | ]
}|j qS r+   )r   )r,   r   r+   r+   r-   r.     s    r   c             S   s&   g | ]}|j r|j d d nd qS )r/   r   )push_verrY   )r,   r   r+   r+   r-   r.     s    c             S   s   g | ]}|j r|j nd qS )r   )r   )r,   r   r+   r+   r-   r.     s    c             S   s   g | ]}|j r|j nd qS )r   )fp_count)r,   r   r+   r+   r-   r.     s    c             S   s   g | ]}|j r|j nd qS )r   )fv_count)r,   r   r+   r+   r-   r.     s    c             S   s   g | ]}|j r|j nd qS )r   )r   )r,   r   r+   r+   r-   r.     s    c             S   s   g | ]}|j r|j nd qS )r   )r   )r,   r   r+   r+   r-   r.     s    r   )
count_datadevice_info) r   r   Zmysite.cloud.utilsr   r   rR   rc   r   rl   rm   rS   r]   r^   rn   r   r   Zexcluder   r   rU   r   r   r   r   rY   r   r   r   r   r   r}   r~   )r   r   r   r   rR   r   Zall_devicesr   Zonline_countZoffline_countr   Zsame_ip_address_devices_queryZsame_ip_address_listZdifferent_ip_address_devicesZdevice_info_listrK   r   Zreal_statusZdevice_ip_address_and_countZdevice_ip_addressr   Zdevice_statusesdevice_datar+   r+   r-   dashboard_device_locationd  s    




 





r   c             C   s   | j }tj d }g }xV|D ]N}i }|j|d< |j|d< |j|d< |j	|d< |j
|d< |j|d< || q$W d|| j jd}|jd	krd
|d< t| d|S )Nr6   device_modeldevice_categoryfirmware_versionfirmware_release_datefirmware_filer   )is_zkteco_loginproductsemailZadminr*   r   z+iclock/firmware/firmware_configuration.html)rR   r   r]   rb   r`   rB   r6   r   r   r   r   r   r~   r   Zusernamer   )r   rR   r   Zall_productr;   product_datar   r+   r+   r-   firmware_configuration  s     







r  c       
   
   C   s>  dd l } yd| jd| jd}| jdd }|d |j }|jjtj	tj
d}|d}|tjj||d	 t| jd}t }| jd|_| jd
|_| jd|_| jd|_|j|_t|d |_t|d |_t|d |_|  tdS  tk
r8 }	 ztdt|	dS d }	~	X Y nX d S )Nr   zfirmware/{0}/{1}r   r   r   /)aws_access_key_idaws_secret_access_keys3)KeyBodyr   r   r*   r   z/iclock/firmware_configuration/r   )codeerror)boto3rt   rW   rX   FILESr   sessionSessionr   AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYresourceBucketAWS_STORAGE_BUCKET_NAME
put_objectversion_extractr   r   r   r   r   r   rZ   major_versionminor_versionbug_fixZsaver   rz   r   r2   )
r   r
  	file_root	file_datacloudFilenamer  r  extracted_versionr   r   r+   r+   r-   firmware_add  s0    


r  c          
   C   s   dd l }| jd}tjj|d}|ryPd|j|j|j}|j	dt
jt
jd}|d|}|  |  tdd	iS  tk
r } ztd
|dS d }~X Y qX ntddiS d S )Nr   r6   )r6   zfirmware/{0}/{1}/{2}r  )r  r  z
zkteco-devr  r*   r   )r  r	  )r
  rW   rX   r   r]   rt   r   r   r   r  r   r  r  Objectdeleter   rz   )r   r
  Zdel_idproductdelete_file_pathr  del_objr   r+   r+   r-   firmware_delete  s&    


r"  c             C   s:  dd l }| jdkryNtjj| jdd}| jdd }|r^d|d j	|d j
|d j}|jdtjtjd}|d	|}|  d
| jd| jd}| jdd }|d |j }|jjtjtjd}	|	d}|tjj||d |j}
t| jd}|j| jd| jd| jd| jd|
t|d t|d t|d d tdS  tk
r } ztd|dS d }~X Y nX | jdkr6| jd}tjj|d}|r*g }xX|D ]P}i }|j|d< |j	|d< |j |d< |j
|d< |j!|d< |j|d< |"| qW td|iS tdi iS d S )Nr   rW   r6   )r6   r   zfirmware/{0}/{1}/{2}r  )r  r  z
zkteco-devzfirmware/{0}/{1}r   r   r  )r  r  r   r   r*   r   )r   r   r   r   r   r  r  r  z/iclock/firmware_configuration/r   )r  r	  r   r  )#r
  r   r   r]   r^   rW   rX   r  rt   r   r   r   r  r   r  r  r  r  r   r  r  r  r  r  r  r}   rZ   r   rz   r   r   r6   r   r   r~   )r   r
  Zupdate_productr  r   r  r!  r  r  r  Zfirmware_file_updatedr  r   r6   ZProductr   r;   Zproduct_datasr+   r+   r-   firmware_edit  sj    

















r#  c       	      C   s   ddl m} ddlm} | jd}| jdd }d }|rL|jj|d }|jj|d	dd	}g }xV|D ]N}|r|d |j
jkr|d
|d |d	 d ql|d|d |d	 d qlW tt|S )Nr   )Area)r   re   r   )r   )r)   r6   r   T)checkedr6   r   F)rP   r$  rQ   r   r   rX   r]   r^   r   rn   r   r6   r~   r   rl   rm   )	r   r$  r   r)   r   r   Z	area_datar   ir+   r+   r-   	area_treeR  s    
r'  c             C   s(   |  d} | d dd}| d}|S )Nr/   r   ZVerrC   rI   )rY   ru   )versionZversion_remove_charr+   r+   r-   r  e  s    

r  z^dashboard_transaction/$)r   z^dashboard_exception/$z^dashboard_monitor/$z^dashboard_device_status/$z^device_config/$z^pending_cmd/$z^area_employees/$z^cdata$Zterminal_cdataz^getrequest$Zterminal_getrequestz^devicecmd$z^fdataZterminal_fdataz^ping$Zterminal_pingz
^registry$Zterminal_registryz^push$Zterminal_pushz^rtdata$Zterminal_rtdataz^querydata$Zterminal_querydataz^file$Zterminal_upgrade_fwz^file/(?P<path>.*)$T)Zdocument_rootZshow_indexesz^api/zmysite.iclock.api.urlsZbiotime_iclock_api)	namespacez^dashboard_card/$Zdashboard_card_detailz^dashboard_card_base/$Zdashboard_card_basez^dashboard_card_temp/$Zdashboard_card_tempz^get_location/$z^dashboard_events/$zdashboard_device_location/$zfirmware_configuration/z^area_tree/$Zcompany_areaz^cdata.aspx$Zterminal_cdata_esslz^getrequest.aspx$Zterminal_getrequest_esslz^devicecmd.aspx$z^fdata.aspxZterminal_fdata_esslz^querydata.aspx$Zterminal_querydata_esslz^ping.aspx$Zterminal_ping_essl)N)N)QrJ   rl   rv   ro   operatorr   Zdjango.conf.urlsr   r   Zdjango.contrib.auth.decoratorsr   r   r   r   Zdjango.utils.encodingr   Zdjango.utils.translationr	   r{   r
   Zdjango.confr   Zdjango.views.staticr   Zdjango.template.responser   Zdjango.shortcutsr   Zdjango.httpr   Zmysite.admin.decoratorsr   Zmysite.iclock.commr   Z!mysite.iclock.dashboard_card_datar   r   r   r|   r   r   rQ   r   rN   r   r   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r"  r#  r'  r  ZcdataZgetreqZdevpostZ	postPhotoZgetpingregistrypushZrtdataZ	querydatary   Zurlpatternsr+   r+   r+   r-   <module>   s    S7 0
a@