B
    +cf(                 @   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	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G dd deZdd Zdddg d g dfddZdd ZdS )    N)models)gettext_lazy)AdminRuntimeWarning)STATUS_VALIDSTATUS_RESIGN)AbstractCloud)db_const)userDeptListc             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	dept_nameparent_dept_idc          	   S   s0   g | ](}t td |d |d |d p$dfqS ))r   nameZpIdr         )dictzip).0obj r   AG:\easytimepro\master/mysite/personnel\models\model_department.py
<listcomp>   s    z*get_tree_nodes_from_db.<locals>.<listcomp>)	is_superuserget_auth_deptexistsZget_current_company
DepartmentobjectsfilterallZvalues_list)userr
   current_companyZqueryset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} | rv| jsvdt| j }ndt| j }||}|r|s|S t| }||| |d	 |S )
z&
    Cache tree data
    :return:
    r   )cacheN)threadlocals)settings)MyUser)usernameZdepartment_tree_nodes_Zapp_dept_tree)Zdjango.core.cacher$   mysite.baser%   get_current_userZdjango.confr&   Zmysite.accounts.modelsr'   ZDEFAULT_ADMIN_NAMEr   getr   strr   r    r#   setdelete)	r   refreshr$   r%   r&   r'   r(   Zcache_tree_namer"   r   r   r   get_tree_nodes    s&    


r0   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dd Zedd Zd! fdd	Zdd Zede_dd Zede_d" fdd	ZG dd  d eZ  ZS )#r   T)Zprimary_keyZdepartment_field_code)Z
max_lengthZdepartment_filed_nameselfZ!department_field_parentDepartment)verbose_nameZblankZnullZ	on_deleteZdepartment_field_isDefaultF)defaultc             C   s   | j jS )N)parent_deptr   )r1   r   r   r   get_parent_nameF   s    zDepartment.get_parent_namec             C   s   t jj| dS )N)r4   )r   r   r   )r1   r   r   r   childrenI   s    zDepartment.childrenc             C   s   t | jS )N)six	text_typer   )r1   r   r   r   __str__L   s    zDepartment.__str__c             C   s   t | jS )N)r7   r8   r   )r1   r   r   r   tree_node_nameO   s    zDepartment.tree_node_nameNc       	         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	| 
|||| | }|rt||stdd |r|jr|js|j r|j|  |
  d S )Nr   )r%   )AnonymousUserZcan_not_set_parent_to_its_ownTF)r/   )r)   r%   Zdjango.contrib.auth.modelsr;   r   r   r   _superr   saver*   
isinstancer0   r   r   r   add)	r1   Zforce_insertZforce_updateusingZupdate_fieldsr%   r;   Z
action_newZcur_user)	__class__r   r   r>   S   s    
zDepartment.savec             C   s   | j jtd S )N)status)employee_setr   r   count)r1   r   r   r   employee_countc   s    zDepartment.employee_countZdepartment_filed_employeeCountc             C   s   | j jt| jd S )N)rC   Zdepartment_id)rD   r   r   r   rE   )r1   r   r   r   resigned_counth   s    zDepartment.resigned_countZdepartment_filed_resignedCountc                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 tdd	 d S )
Nr   z;%(name)s_still_has_sub-departments_and_cannot_be_cancelled.r   )rC   z4%(name)s_still_has_personnel_and_cannot_be_cancelledz&default_department_can_not_be_removed.)rA   keep_parentsT)r/   )r6   rE   r<   r,   r   rD   r   r   
is_defaultr   r=   r   r.   r0   )r1   rA   rH   message)rB   r   r   r.   m   s    zDepartment.deletec               @   s(   e Zd ZdgZejZedZeZ	dZ
dS )zDepartment.Metar   Zpsnl_model_department))	dept_coder
   N)__name__
__module____qualname__Zorderingr   Z	APP_LABELZ	app_labelr<   r2   Zverbose_name_pluralZunique_togetherr   r   r   r   Metaz   s
   rO   )FFNN)NF)rL   rM   rN   r   Z	AutoFieldr   Z	CharFieldr<   r   ZMAX_DEPARTMENT_CODErK   ZMAX_DEPARTMENT_NAMEr   Z
ForeignKeyZCASCADEr4   ZBooleanFieldrI   r5   r6   r9   propertyr:   r>   rF   Zshort_descriptionrG   r.   objectrO   __classcell__r   r   )rB   r   r   =   s$   
 

r   c             C   s  g }dt |jkr| jjs"| jjrJ|jj|r0|nd djdddd}nTt	| j|}|dkr~|jj|djdddd}n |jj||d	jdddd}nDd
t |jkrB| jjs| jjr|jj|r|nd djdddd}nVt	| j|}|dkr |jj|djdddd}n |jj||djdddd}ndt |jkr| jjsf| jjr|jj|rv|nd djdddd}nVt	| j|}|dkr|jj|djdddd}n |jj||djdddd}||fS )Nposition)parent_position__exactr   )Zdel_flagparent_positionr   r   )position_code__in)rT   rV   
department)parent_dept__exactr4   )
DeptID__in)rX   rY   area)parent_area__exactparent_area)id__in)r[   r]   )
r,   Z_metar   r   
is_alldeptr   r   ZexcludeZorder_byr	   )requestdeptidd_item	dataModelZ	dept_listr!   r   r   r   get_dept_items   s>    



  

 rc    c
             C   s  y|t | }
W n tk
r$   g S X g }i }|d }x|
D ]}| jjs^| jjs^||kr^q>|dkrp||krpq>|	jj|d}t||d< | jdd}|dkrt	||d |d	< |j
rt |j
jnd |d
< |j|d< nv|dkr|j|d	< |jr t |jjnd |d
< |j|d< n:|dkrN|j|d	< |jr<t |jjnd |d
< |j|d< d|d< |d |d< d}y|t |  W n   d}Y nX ||d< |s|dk rd|d< t| |||||||||	
|d< n|rd|d< g |d< | }|| q>W |S )Nr   rW   )r   r   funcrd   rS   _namer   ZpidvaluerZ   FopenlevelTZisParentr6   )r,   	Exceptionr   r   r^   r   r+   intZGETgetattrrU   r   Zposition_coder   r4   rK   Z	area_namer\   Z	area_codeget_dept_list_excopyappend)r_   ra   r`   ZisallZonlyshowsecondDeptZsub_funZlDeptsri   r	   rb   Zd_itemsZdeptObjdiZdobjZfunidtagtr   r   r   rm      s^      





rm   c                sL   ddl m   fddg } jj| d}|r>|d |  jj|dS )ud   
    根据部门id获取 旗下的所有子部门(不包括自身)
    返回QuerySet查询集
    r   )r   c                sB    j j| d}x.|D ]&}|j|kr||j |j| qW d S )N)r4   )r   r   r   ro   )r   children_deptsZsub_deptrp   )r   r6   r   r   r6      s
    

z-get_all_childrens_by_deptid.<locals>.children)Zpk)Zpk__in)Zmysite.personnel.modelsr   r   r   )r`   rt   rW   r   )r   r6   r   get_all_childrens_by_deptid   s    ru   )NN)NF)r7   Z	django.dbr   Zdjango.utils.translationr   r<   Zmysite.admin.exceptionsr   Zmysite.admin.modelsr   r   Z!mysite.admin.abstract_cloud_modelr   Zmysite.personnelr   Zmysite.personnel.iutilsr	   r#   r0   r   rc   rm   ru   r   r   r   r   <module>   s   

E+
2