B
    IDb                 @   sl   d Z ddlZddlmZ ddlmZ i adag Zdd Z	g fdd	Z
d
d Zdd ZdddZdddZdS )u  
有关部门的规则

1 前台没有选择包含子部门时 查询的数据是指当前部门的数据
2 前台选择包含子部门时 分如下情况
   如果选择的部门为总公司级即第一级部门 系统将认为是所有部门 在有关查询条件中不要加部门限制 getAllAuthChildDept返回的结果为[-1]
   如果不是第一级时对超级用户将自动包括其下级所有部门 如果是普通用户结果是被授权的所有子部门getAllAuthChildDept返回的结果为[3,4,5...]

    N)cache)settings c             C   s"   y||  }W n   g }Y nX |S )N )DeptIDd_itemZretr   r   0G:\easytimepro\master/mysite/personnel\iutils.py	Childrens   s
    
r	   c             C   s6   x0t | |D ]"}||kr|| t||| qW dS )u<   获取当前部门下的所有子部门，不含当前部门N)r	   appendAllChildrens)Zcuridr   startdr   r   r   r   %   s    
r   c       
      C   s.  ddl m} ddlm} |d}|t_tdtj| j	tjf }|rH|S t
| |}g }| jsb| jr|j jdddd	}x|D ]}|t|j qW nb|jj| d
jddd}xD|D ]<}|jdkrg }	tt|j||	 ||	7 }|t|j qW tt|}tjdtj| j	tjf |dd |S )Nr   )
Department)get_param_valueDEPT_VERSIONz%s_userdepts_%s_%s   )del_flagparent_dept	dept_code)user)Zdept__del_tagZdeptiQ )timeout)(mysite.personnel.models.model_departmentr   mysite.base.modelsr   r   r   r   getUNITidget_dept_as_dictZis_superuserZ
is_alldeptobjectsallexcludeorder_byr
   intr   filterZiscascadecheckr   Zdept_idlistset)
r   	dataModelr   r   vZResultr   Zrs_depttZrsr   r   r   userDeptList.   s.    



 r(   c       	   
   C   s   ddl m} | sg S | dkr"dgS || }td |}g }t| || |jj|djddd}t|}y|	|  W n" t
k
r } zW d d }~X Y nX |S )Nr   )r   r   )Z
DeptID__inr   T)Zflat)r   r   ZobjByIDr   r   r   r   Zvalues_listr#   remove	Exception)	ZdataKeyZrequestr%   r   objr   Z
childDeptsZpDeptser   r   r   getAvailableParentDeptsL   s       

r-   c          
   C   s  ddl m} || d }t|kr>tdtj| |f a	t	rJ|at	S tdtj| |f a	t	rp|at	S i }d}t
j
 }|jd d |jd  |jd  |j d }|jj}	d}
x|	D ]}d	|jkr|j}
P qW |
sd
S |jjdd|
}x|D ]}|d }yt||
}W n   d }Y nX |ry|t| t|j W q   y(g |t|< |t| t|j W n   Y nX Y qX qW ||d< tdtj| |f | td|  |S )Nr   )r   Z_VERSIONz%s_%s_dict_%s   i  <   r   parentFr   )r   countz_is_loading_%s)r   r   upperdeptversionr   r   r   r   lower
d_deptDictdatetimenowdayhourminutesecondZ_metaZfieldsZattnamer   r   r    getattrstrr
   r!   r   r$   delete)r   Zfunidr%   r   verlljntsecsfield_namesparent_nameZ
field_nameobjsoZ
parent_objr   r   r   r   a   sV    
,



r   c          
   C   s  ddl m} ddlm} |d}t|kr<tdtj|f a	t	rH|at	S tdtj|f a	t	rh|at	S g }i }d}d}t
j
 }|jd d |jd  |jd  |j d }	td	|	 }
|jjd
ddd}x|D ]x}|d
 }|jry|t|j t|j W q   y,g |t|j< |t|j t|j W n   Y nX Y qX qW ||d< tdtj|f | td	|	  |S )Nr   )r   )r   ZPOSITION_VERSIONz%s_deptdict_%sr.   i  r/   z_is_loading_%sr   )r   r   r   r1   )r   r   r   r   r3   r   r   r   r   r5   r6   r7   r8   r9   r:   r;   r   r   r    Zparent_dept_idr=   r
   r!   r   r$   r>   )r   r   r   r?   Z	dept_listr@   rA   irB   rC   Z
is_loadingrF   rG   r   r   r   get_pos_as_dict   sF    
,
rI   )NNN)N)__doc__r6   Zdjango.core.cacher   Zdjango.confr   r5   r3   ZgStatusr	   r   r(   r-   r   rI   r   r   r   r   <module>   s   	
2