U
    =e7%                     @   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dd Z f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   list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   Проектные ролиr0   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#   r6   p   s    zCmfOrgUnit._open_focusr
   c                 C   s   |  ||}| |d |s$d|d< | ||}| ||}| j|d}|  }	|  }
dd }||||
||||||||	gS )Nr   Tr5   )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&   r6   r*   r+   r/   r1   r2   )r   r!   r   r7   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                 C   st   |  dg | jD ]\}t|tjr8| dg |  qt|tjr| ddg d|j_|	  |j
dd qd S )Nr   tree_parentr   T)Z	only_data)Zload_fieldsr   
isinstancer   r   _recalc_role_pathr   r?   
is_changedZ_calc_cache_pathsave)selfr8   r"   r"   r#   rA      s    

zCmfOrgUnit._recalc_role_pathc                    s   dg}t   | S )Nr?   )supersave_preload_fields)rD   r   	__class__r"   r#   rF      s    zCmfOrgUnit.save_preload_fieldsc                    sd   | j js| jjs| jjr |   | jjrVtj| j	g tj
  tj  tj  t jf |S )N)r   rB   r   r?   rA   r   r   ZCmfAccessListZsubject_changed_hookr   ZCmfProjectPermSchemeZtrigger_reloadZCmfProjectRoleAssignZCmfProjectNotifySchemerE   rC   )rD   kwargsrG   r"   r#   rC      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   rJ   ).0objr"   r"   r#   
<listcomp>   s     zMCmfOrgUnit.tree_parent_options_list.<locals>.all_children.<locals>.<listcomp>)ZcmfutilZget_obj_by_idgetattrr   r4   )r   resr8   rL   all_childrenr"   r#   rQ      s    z9CmfOrgUnit.tree_parent_options_list.<locals>.all_childrenr   z!=r   zNOT INr?   )r4   getrE   field_options_list)r   r,   Z	object_idZobject_fieldsrI   Zfilter_addonrG   rP   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 )Nr?   r,   headr   r   )rT   r4   rE   rS   )r   Zrelation_field_namer,   r   rI   rG   r"   r#   rS      s    
zCmfOrgUnit.field_options_list)FN)FN)FN)FNT)FN)FN)r3   F)FNr
   T)NNN)NN)__name__
__module____qualname__classmethodr&   r*   r+   r/   r1   r2   r   r6   r>   rA   rF   rC   rT   rS   __classcell__r"   r"   rG   r#   r      s2   


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