U
    [c                     @   s0   d dl T d dlZG dd dejjjejjZdS )    )*Nc                       s   e Zd ZedddZedddZedddZedd
dZedddZedddZ	edd Z
edddZ fddZ  ZS )
CmfOrgUnitFNc                    sT   t jddjd}d|d< d|d< d|d	< d |d
< d fdd	| |S )Nu   Структураnamefieldsstruct	root_typeCmfOrgUnit:1idTopenedcoder   c                    s   |dkrd S | d }| d dkr$d }  tjj|dd}|D ]}||d d qD  tjj|d	g dd	g d}|D ]}d
|d< q|| || d< d S )N
   r   r	   r   )tree_parent_idr       )depthpersonTr   
tree_nodes)_process_childrenmodelsr   listZCmfRoleextend)rootr   r   ord_childrenschildZrolesZ	role_dictclsfilter_fieldsget_children
only_dicts './modules/person/models/cmf_org_unit.pyr      s2       

z0CmfOrgUnit.get_struct_root.<locals>.get_children)r   )r   r   get_values_dict)r   r    r   struct_rootr!   r   r"   get_struct_root   s    zCmfOrgUnit.get_struct_rootc                 C   s8   t jddj|d}d|d< d|d< g |d< d |d	< |S )
Nu   Группыr   r   groupr	   zCmfPersonGroup:2r   r   r   )r   CmfPersonGroupr#   r   r    r   r   r!   r!   r"   get_groups_root%   s    zCmfOrgUnit.get_groups_rootc                 C   sP   t jddj|d}d|d< d|d< | t jjd|d	||d
|d< d |d< |S )Nu   Мои Компанииr   r   Zcompanyr	   zCmfCompany:3r   T)Zis_internalr   r   r   r   )r   r'   r#   r   Z
CmfCompanyr   r(   r!   r!   r"   get_company_root0   s     zCmfOrgUnit.get_company_rootTc                 C   sV   t jddj|d}d|d< d|d< |rRt jjdd	d
g|d}| |||d|d< |S )Nu   Пользователиr   r   r   r	   zCmfPerson:4r   Z
user_localz==T)filterr   r   r   )r   r'   r#   Z	CmfPersonr   r   )r   r    r   load_personsr   childrenr!   r!   r"   get_persons_root?   s"        zCmfOrgUnit.get_persons_rootc                 C   s2   t jdddj|d}d|d< d|d< g |d< |S )	NzCmfJob:5u#   Штатное расписание)r   r   r   Zjobr	   r   r   )r   ZCmfJobr#   r(   r!   r!   r"   get_job_rootR   s
    zCmfOrgUnit.get_job_rootflatc           	      C   sX   |ri ng }|D ]B}|j |d}||d< g |d< ||d< |rH|||j< q|| q|S )Nr   r	   r   r   )r#   r   append)	r   r-   r    r   r	   r   r   r   Zchild_valuesr!   r!   r"   r   Z   s    zCmfOrgUnit._process_childrenc                 C   sF   |D ]<}|d |kr"d|d<  dS |  |d |rd|d<  dS qdS )Nr   Tfocusr   r   F)_open_focus)r   Ztreefocus_idZnoder!   r!   r"   r3   h   s    zCmfOrgUnit._open_focusr
   c                 C   sz   |  ||}| |d |s$d|d< | ||}| ||}| j|d}|  }	dd }
|
||
||
||
||
|	gS )Nr   Tr2   )r,   c                 S   s*   |    D ]\}}|dkrd | |< q| S )N.)copyitems)r   kvr!   r!   r"   fix_id   s    
z(CmfOrgUnit.get_full_tree.<locals>.fix_id)r%   r3   r)   r*   r.   r/   )r   r    r   r4   r,   r$   Z
group_rootZcompany_rootZperson_rootZjob_rootr9   r!   r!   r"   get_full_trees   s     zCmfOrgUnit.get_full_treec                    s    | j jrtj  t jf |S )N)r   Z
is_changedr   ZCmfAccessListZtrigger_reloadsupersave)selfkwargs	__class__r!   r"   r<      s    
zCmfOrgUnit.save)FN)FN)FN)FNT)FN)r0   F)FNr
   T)__name__
__module____qualname__classmethodr%   r)   r*   r.   r/   r   r3   r:   r<   __classcell__r!   r!   r?   r"   r      s"   


r   )	Zcmf.includeZcommon.models.cmf_translit_codecommonr   Zcmf_translit_codeZCmfTranslitCodeZcmfZ	CmfEntityr   r!   r!   r!   r"   <module>   s   