U
    jgJ'                     @   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dZejjjdg 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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 )0
CmfOrgUnitTget_full_treeFNc                    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_root5   s     zCmfOrgUnit.get_company_rootc                 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_rootD   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_rootW   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   Проектные ролиr1   r   Zpjroler
   r   r   )r   ZCmfProjectRoler%   r*   r#   r#   r$   get_projectrole_root_   s
    zCmfOrgUnit.get_projectrole_rootc                 C   s2   t jdddj|d}d|d< d|d< g |d< |S )	NzCmfEvagitRole:7u   Git ролиr1   r   Zegroler
   r   r   )r   ZCmfEvagitRoler%   r*   r#   r#   r$   get_evagit_role_rootg   s
    zCmfOrgUnit.get_evagit_role_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   o   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$   r8   }   s    zCmfOrgUnit._open_focusr   c                 C   s   |  ||}| |d |s$d|d< | ||}| ||}| j|d}|  }	|  }
|  }dd }||||
||||||||	||gS )Nr   Tr7   )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'   r8   r+   r,   r0   r2   r3   r4   )r   r"   r    r9   r.   r&   Z
group_rootZcompany_rootZperson_rootZjob_rootZprojectrole_rootZevagit_role_rootr?   r#   r#   r$   r      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)selfr:   r#   r#   r$   rB      s    

zCmfOrgUnit._recalc_role_pathc                    s   dg}t   | S )Nr@   )supersave_preload_fields)rE   r   	__class__r#   r$   rG      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   rC   r   r@   rB   r   r   ZCmfAccessListZsubject_changed_hookr   ZCmfProjectPermSchemeZtrigger_reloadZCmfProjectRoleAssignZCmfProjectNotifySchemerF   rD   )rE   kwargsrH   r#   r$   rD      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   rK   ).0objr#   r#   r$   
<listcomp>   s     zMCmfOrgUnit.tree_parent_options_list.<locals>.all_children.<locals>.<listcomp>)ZcmfutilZget_obj_by_idgetattrr   r6   )r   resr:   rM   all_childrenr#   r$   rR      s    z9CmfOrgUnit.tree_parent_options_list.<locals>.all_childrenr   z!=r   zNOT INr@   )r6   getrF   field_options_list)r   r-   Z	object_idZobject_fieldsrJ   Zfilter_addonrH   rQ   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   )rU   r6   rF   rT   )r   Zrelation_field_namer-   r   rJ   rH   r#   r$   rT      s    
zCmfOrgUnit.field_options_list)FN)FN)FN)FNT)FN)FN)FN)r5   F)FNr   T)NNN)NN)__name__
__module____qualname__Z	api_allowcmfr   	CmfEntityZapi_methodsclassmethodr'   r+   r,   r0   r2   r3   r4   r   r8   r   rB   rG   rD   rU   rT   __classcell__r#   r#   rH   r$   r      s>   


r   )Zcmf.includeZcmf.models.cmf_translit_coderZ   r   Zcmf_translit_codeZCmfTranslitCoder[   r   r#   r#   r#   r$   <module>   s   