B
    ebj!                 @   s   d dl m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 d dlmZ d dlmZ d d	lmZ dd
dZdddZdddZdddZdd Zdd Zdd ZG dd deZdS )    )settingsN)cache)models)gettext_lazy)AdminRuntimeWarning)AbstractCloud)db_const)STATUS_RESIGNc             C   s^   | j s| j s4|dkr |  n|}tjj|d}n
| j }|ddd}dd |D }|S )z)
    generate for zTree
    :return:
    N)companyid	area_nameparent_area_idc          	   S   s0   g | ](}t td |d |d |d p$dfqS ))r   namepIdr         )dictzip).0obj r   ;G:\easytimepro\master/mysite/personnel\models\model_area.py
<listcomp>    s    z*get_tree_nodes_from_db.<locals>.<listcomp>)	is_superuserget_auth_areaexistsZget_current_companyAreaobjectsfilterallvalues_list)userr
   current_companyquerysetobjs	tree_datar   r   r   get_tree_nodes_from_db   s    
r&   Fc             C   sr   | dkrddl m} | } | r6| js6dt| j }ndt| j }t|}|rZ|sZ|S t	| }t
|| |S )z&
    Cache tree data
    :return:
    Nr   )threadlocalsZarea_tree_nodes_)mysite.baser'   get_current_userr   strr   r"   r   getr&   set)r!   refreshr'   cache_tree_namer%   r   r   r   get_tree_nodes$   s    

r/   c             C   s`   | r| j s| j s.tjj| jdjdd}n| j jdd}|	ddd}dd |D }|S )	z)
    generate for zTree
    :return:
    )
company_idr   )	area_coder   r   r   c          	   S   s0   g | ](}t td |d |d |d p$dfqS ))r   r   r   r   r   r   )r   r   )r   r   r   r   r   r   B   s    z:get_tree_nodes_without_default_from_db.<locals>.<listcomp>)
r   r   r   r   r   r   r"   Zexcluder   r    )r!   r#   r$   r%   r   r   r   &get_tree_nodes_without_default_from_db8   s    r2   c             C   s~   | dkrddl m} | } | r<| js<dtj t| j }ndtj t| j }t	
|}|rf|sf|S t| }t	|| |S )z&
    Cache tree data
    :return:
    Nr   )r'   z#%s_area_tree_nodes_without_default_)r(   r'   r)   r   r   UNITr*   r   r"   r   r+   r2   r,   )r!   r-   r'   r.   r%   r   r   r   get_tree_nodes_without_defaultF   s    

r4   c               C   s   t dtj  d S )Nz%s_sys_area_cache)r   deleter   r3   r   r   r   r   remove_area_cacheZ   s    r6   c              C   sZ   t j dddd} i }| r*t| }tdtj	 | tdtj	 t
|  |S )Nr   r   z%s_sys_area_cachez%s_superuser_area)r   r   r   Zonlyr    r   r   r,   r   r3   listkeys)r$   areasr   r   r   set_area_cache^   s    r:   c              C   s    t dtj d } | st } | S )Nz%s_sys_area_cache)r   r+   r   r3   r:   )r9   r   r   r   get_area_cacheh   s    r;   c                   s  e Zd ZejddZejedej	dZ
ejedejdZejdedddejdZejed	d
dZdd Zd* fdd	ZG dd dZdd Zedd Zedd Zdd Zede_dd Zede_dd  Zd!d" Zd#d$ Zed%e_ed&e_ed'e_d+ fd(d)	Z  Z S ),r   T)Zprimary_keyZarea_field_code)Z
max_lengthZarea_field_nameselfZarea_field_parentArea)verbose_nameZblankZnullZ	on_deleteZarea_field_isDefaultF)defaultc             C   s   t t| jS )N)six	text_typer*   r   )r<   r   r   r   __str__x   s    zArea.__str__Nc       	         s   ddl m} ddlm} | jd k	r:| j| jkr:ttd| jsDdnd}t	t
| |||| | }|r|rt||s|jr|js|j r|j|  |  ytdd tdd t  W n tk
r   Y nX d S )Nr   )r'   )AnonymousUserZparent_can_not_itselfTF)r-   )r(   r'   Zdjango.contrib.auth.modelsrB   pkr   r   _r   superr   saver)   
isinstancer   r   r   addr/   r4   r:   	Exception)	r<   Zforce_insertZforce_updateusingZupdate_fieldsr'   rB   Z
action_newZcur_user)	__class__r   r   rF   {   s"    


z	Area.savec               @   s(   e Zd ZdgZejZedZeZ	dZ
dS )z	Area.Metar   Zpsnl_model_area))r1   r
   N)__name__
__module____qualname__Zorderingr   Z	APP_LABELZ	app_labelrD   r=   Zverbose_name_pluralZunique_togetherr   r   r   r   Meta   s
   rO   c             C   s   t jj| dS )N)parent_area)r   r   r   )r<   r   r   r   children   s    zArea.childrenc             C   s
   | j dkS )Nr   )rC   )r<   r   r   r   r>      s    zArea.defaultc             C   s   t | jS )N)r?   r@   r   )r<   r   r   r   tree_node_name   s    zArea.tree_node_namec             C   s&   ddl m}m} | jj||gd S )Nr   )STATUS_VALIDSTATUS_RESIGN_PENDING)Z
status__in)mysite.admin.modelsrS   rT   employee_setr   count)r<   rS   rT   r   r   r   employee_count   s    zArea.employee_countZarea_field_employeeCountc             C   s   | j jt| jd S )N)statusZarea__id)rV   r   r	   r   rW   )r<   r   r   r   resign_employee_count   s    zArea.resign_employee_countZarea_field_resignEmployeeCountc             C   s:   ddl m} | js | j  S |jj| jdd S d S )Nr   )TerminalT)r0   Zarea__is_default)	mysite.iclock.modelsr[   
is_defaultterminal_setr   rW   r   r   r0   )r<   r[   r   r   r   device_count   s    zArea.device_countc             C   s:   ddl m}m} ddlm} |jj| d||gd }|S )Nr   )rS   rT   )BioDatar   )employee__areaZbio_typeemployee__status__in)rU   rS   rT   r\   r`   r   r   rW   )r<   rS   rT   r`   valuer   r   r   
face_count   s
    
zArea.face_countc             C   s>   ddl m}m} ddlm} |jj| ddg||gd }|S )Nr   )rS   rT   )BioPhotor      )ra   Zapproval_state__inrb   )rU   rS   rT   r\   re   r   r   rW   )r<   rS   rT   re   rc   r   r   r   VLFace_count   s
    zArea.VLFace_countZarea_field_deviceCountz
Face CountzVLFace Countc                s   g }|    dkr*tddt| ji }| j dkrNtddt| ji }t| j dkrvtddt| ji }| j	rtd}|rt
t|tt| j||d tdd	 tdd	 d S )
Nr   z4%(name)s_still_has_sub-areas_and_cannot_be_cancelledr   z4%(name)s_still_has_personnel_and_cannot_be_cancelledz8%(name)s_still_has_use_by_device_and_cannot_be_cancelledZdefault_area_can_not_be_removed)rJ   keep_parentsT)r-   )rQ   rW   rD   r*   r   rV   lenr^   r   r]   r   rE   r   r5   r/   r4   )r<   rJ   rh   message)rK   r   r   r5      s    
zArea.delete)FFNN)NF)!rL   rM   rN   r   Z	AutoFieldr   Z	CharFieldrD   r   ZMAX_AREA_CODEr1   ZMAX_AREA_NAMEr   Z
ForeignKeyZCASCADErP   ZBooleanFieldr]   rA   rF   rO   rQ   propertyr>   rR   rX   Zshort_descriptionrZ   r_   rd   rg   r5   __classcell__r   r   )rK   r   r   o   s0   
 




r   )NN)NF)N)NF)Zdjango.confr   r?   Zdjango.core.cacher   Z	django.dbr   Zdjango.utils.translationr   rD   Zmysite.admin.exceptionsr   Z!mysite.admin.abstract_cloud_modelr   Zmysite.personnelr   rU   r	   r&   r/   r2   r4   r6   r:   r;   r   r   r   r   r   <module>   s    




