U
    rc                      @   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dZ
edd Zed%ddZ fddZed& fdd	Zed' 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_rootc                 C   s2   t jdddj|d}d|d< d|d< g |d< |S )	NzCmfProjectRole:6u   Проектные ролиr/   r   Zpjroler	   r   r   )r   ZCmfProjectRoler#   r(   r!   r!   r"   get_projectrole_rootZ   s
    zCmfOrgUnit.get_projectrole_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   b   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_idnoder!   r!   r"   r5   p   s    zCmfOrgUnit._open_focusr
   c                 C   s   |  ||}| |d |s$d|d< | ||}| ||}| j|d}|  }	|  }
dd }||||
||||||||	gS )Nr   Tr4   )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%   r5   r)   r*   r.   r0   r1   )r   r    r   r6   r,   r$   Z
group_rootZcompany_rootZperson_rootZjob_rootZprojectrole_rootr<   r!   r!   r"   get_full_tree{   s     zCmfOrgUnit.get_full_treec                    s*   | j jrtj  tj  t jf |S )N)r   Z
is_changedr   ZCmfAccessListZtrigger_reloadZCmfProjectPermSchemesupersave)selfkwargs	__class__r!   r"   r?      s    

zCmfOrgUnit.savec                    sn    fdd g }|r$| dd|g |rJ|drJ| dd |d g |rX||g}n|}t jd|f|S )Nc                    sZ   g }| D ]L}t j|d ddgd}t|dd rF| dd |jD 7 }||d  q|S )Nr   Tr   )Zsimpler   c                 S   s   g | ]}d |j iqS r   rD   ).0objr!   r!   r"   
<listcomp>   s     zMCmfOrgUnit.tree_parent_options_list.<locals>.all_children.<locals>.<listcomp>)ZcmfutilZget_obj_by_idgetattrr   r3   )r   resr7   rF   all_childrenr!   r"   rK      s    z9CmfOrgUnit.tree_parent_options_list.<locals>.all_childrenr   z!=r   zNOT INtree_parent)r3   getr>   field_options_list)r   r+   Z	object_idZobject_fieldsrA   Zfilter_addonrB   rJ   r"   tree_parent_options_list   s    	
z#CmfOrgUnit.tree_parent_options_listc                    s\   |dkr| j f d|i|S |dkrB|s0dg}nd|krB|d t j||fd|i|S )NrL   r+   headr   r   )rO   r3   r>   rN   )r   Zrelation_field_namer+   r   rA   rB   r!   r"   rN      s    
zCmfOrgUnit.field_options_list)FN)FN)FN)FNT)FN)FN)r2   F)FNr
   T)NNN)NN)__name__
__module____qualname__classmethodr%   r)   r*   r.   r0   r1   r   r5   r=   r?   rO   rN   __classcell__r!   r!   rB   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   