B
    Ob                 @   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mZ ddd	ZdddZG dd de	ZdS )    N)models)gettext_lazy)AdminRuntimeWarning)AbstractCloud)db_const)STATUS_VALIDSTATUS_RESIGNc             C   s2   |   }tjj|dddd}dd |D }|S )z)
    generate for zTree
    :return:
    )Zcompanyidlocation_nameparent_location_idc          	   S   s0   g | ](}t td |d |d |d p$dfqS ))r	   nameZpIdr         )dictzip).0obj r   ?G:\easytimepro\master/mysite/personnel\models\model_location.py
<listcomp>   s    z*get_tree_nodes_from_db.<locals>.<listcomp>)Zget_current_companyLocationobjectsfilterZvalues_list)usercurrent_companyZobjs	tree_datar   r   r   get_tree_nodes_from_db   s    r   Fc             C   s   ddl m} | dkr\ddlm} | } | dkr\ddlm} ddlm} |j	}|j
j|d} |dt| j }|r||s||S t| }|dt| j | |S )	z&
    Cache tree data
    :return:
    r   )cacheN)threadlocals)settings)MyUser)usernameZlocation_tree_nodes_)Zdjango.core.cacher   mysite.baser   get_current_userZdjango.confr   Zmysite.accounts.modelsr    ZDEFAULT_ADMIN_NAMEr   getstrr   r   set)r   refreshr   r   r   r    r!   r   r   r   r   get_tree_nodes   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d Zede_d fdd	ZG dd dZedd Zdd Zd  fdd	Zdd Zede_  ZS )!r   T)Zprimary_keyZlocation_field_code)Z
max_lengthZlocation_field_nameselfZlocation_field_parentLocation)verbose_nameZnullZblankZ	on_deleteZlocation_field_isDefaultF)defaultc             C   s   t t| jS )N)six	text_typer%   r
   )r)   r   r   r   __str__8   s    zLocation.__str__c             C   s   | j jtd S )N)status)employee_setr   r   count)r)   r   r   r   employee_count;   s    zLocation.employee_countZlocation_field_employeeCountNc                s   g }|    dkr*tddt| ji }| jjtd dkrVtddt| ji }| jrdtd}|rpt	|t
t| j||d ddlm} dd	lm} | }|rt||std
d d S )Nr   z7%(name)s_still_has_sub-location_and_cannot_be_cancelledr   )r/   z4%(name)s_still_has_personnel_and_cannot_be_cancelledz$default_location_can_not_be_removed.)usingkeep_parents)r   )AnonymousUserT)r'   )childrenr1   _r%   r
   r0   r   r   
is_defaultr   superr   deleter"   r   django.contrib.auth.modelsr5   r#   
isinstancer(   )r)   r3   r4   messager   r5   cur_user)	__class__r   r   r:   @   s    zLocation.deletec               @   s$   e Zd ZdgZejZedZeZ	dS )zLocation.Metar	   Zpsnl_model_locationN)
__name__
__module____qualname__Zorderingr   Z	APP_LABELZ	app_labelr7   r*   Zverbose_name_pluralr   r   r   r   MetaQ   s   rC   c             C   s   t | jS )N)r,   r-   r
   )r)   r   r   r   tree_node_nameW   s    zLocation.tree_node_namec             C   s   t jj| dS )N)parent_location)r   r   r   )r)   r   r   r   r6   [   s    zLocation.childrenc                st   ddl m} ddlm} | jd k	r:| j| jkr:ttdtt	| 
|||| | }|rpt||sptdd d S )Nr   )r   )r5   zcan_not_set_parent_to_its_own.T)r'   )r"   r   r;   r5   r	   r   r   r7   r9   r   saver#   r<   r(   )r)   Zforce_insertZforce_updater3   Zupdate_fieldsr   r5   r>   )r?   r   r   rF   ^   s    zLocation.savec             C   s   | j jt| jd S )N)r/   Zlocation_id)r0   r   r   r	   r1   )r)   r   r   r   resign_employee_counti   s    zLocation.resign_employee_countZlocation_field_resignedCount)NF)FFNN)r@   rA   rB   r   Z	AutoFieldr	   Z	CharFieldr7   r   ZMAX_LOCATION_CODEZlocation_codeZMAX_LOCATION_NAMEr
   Z
ForeignKeyZCASCADErE   ZBooleanFieldr8   r.   r2   Zshort_descriptionr:   rC   propertyrD   r6   rF   rG   __classcell__r   r   )r?   r   r   /   s"   

 
r   )N)NF)r,   Z	django.dbr   Zdjango.utils.translationr   r7   Zmysite.admin.exceptionsr   Z!mysite.admin.abstract_cloud_modelr   Zmysite.personnelr   Zmysite.admin.modelsr   r   r   r(   r   r   r   r   r   <module>   s   

