
    jgJ'                         d dl  d dlZ G d dej                  j                  j
                  ej                  j                        Zy)    )*Nc                   X    e Zd ZdZej
                  j                  j                  dgz   Zedd       Z	edd       Z
edd       Zedd       Zedd       Zedd       Zedd	       Zedd
       Zed        Zedd       Zd Z fdZ fdZed fd	       Zed fd	       Z xZS )
CmfOrgUnitTget_full_treec                      t         j                  d      j                        }d|d<   d|d<   d|d	<   d |d
<   d fd	 |       |S )Nu   Структураnamefieldsstruct	root_typeCmfOrgUnit:1idTopenedcodec                 x   |dk(  ry | d   }| d   dk(  rd }j                  t        j                  j                  |      
d      }|D ]  } 	||dz           j                  t        j                  j                  |d	gz         
d	gz   d      }|D ]  }d
|d<   	 |j                  |       || d<   y )N
   r   r   r   )tree_parent_idr       )depthpersonTr   
tree_nodes)_process_childrenmodelsr   listCmfRoleextend)rootr   r   ord_childrenschildroles	role_dictclsfilter_fieldsget_children
only_dictss          './modules/person/models/cmf_org_unit.pyr&   z0CmfOrgUnit.get_struct_root.<locals>.get_children   s    {!$ZNK H,!%11&2C2C2H2HXfP] 3I 3_2<mRQM ' 5U%!)45 ))&..*=*=^ERV^U_E_ +> +abl*78**DbJE # +	&*	(#+  '!.D    )r   )r   r   get_values_dict)r$   r'   r%   struct_rootr&   s   ``` @r(   get_struct_rootzCmfOrgUnit.get_struct_root   sh    ''-A'BRRZgRh#+K *D $H"F	/ 	/( 	[!r)   c                 z    t         j                  d      j                  |      }d|d<   d|d<   g |d<   d |d	<   |S )
Nu   Группыr   r
   groupr   zCmfPersonGroup:2r   r   r   )r   CmfPersonGroupr*   r$   r'   r%   r   s       r(   get_groups_rootzCmfOrgUnit.get_groups_root*   sQ    $$.$9IIQ^I_#['T
  \Vr)   c                     t         j                  d      j                  |      }d|d<   d|d<   | j                  t         j                  j                  d|	      ||d
      |d<   d |d<   |S )Nu   Мои Компанииr   r
   companyr   zCmfCompany:3r   T)is_internalr   r   r   r   )r   r/   r*   r   
CmfCompanyr   r0   s       r(   get_company_rootzCmfOrgUnit.get_company_root5   s    $$*C$DTT\iTj%[#T
 2263D3D3I3IVZcp3I3qs}6CRI\V r)   c                     t         j                  d      j                  |      }d|d<   d|d<   |r:t         j                  j	                  g d|	      }| j                  |||d
      |d<   |S )Nu   Пользователиr   r
   r   r   zCmfPerson:4r   )
user_localz==T)filterr   r   r   )r   r/   r*   	CmfPersonr   r   )r$   r'   r%   load_personsr   childrens         r(   get_persons_rootzCmfOrgUnit.get_persons_rootD   s    $$*D$EUU  V 
 %["T
'',,1- - H "%!6!6*mR"D r)   c                 r    t         j                  dd      j                  |      }d|d<   d|d<   g |d<   |S )	NzCmfJob:5u#   Штатное расписаниеr   r	   r
   jobr   r   r   )r   CmfJobr*   r0   s       r(   get_job_rootzCmfOrgUnit.get_job_rootW   sF    }}*2W}Xhhp}h~![T
\r)   c                 r    t         j                  dd      j                  |      }d|d<   d|d<   g |d<   |S )	NzCmfProjectRole:6u   Проектные ролиr?   r
   pjroler   r   r   )r   CmfProjectRoler*   r0   s       r(   get_projectrole_rootzCmfOrgUnit.get_projectrole_root_   sQ    $$*<B_$`pp  yFp  G$['T
\r)   c                 r    t         j                  dd      j                  |      }d|d<   d|d<   g |d<   |S )	NzCmfEvagitRole:7u   Git ролиr?   r
   egroler   r   r   )r   CmfEvagitRoler*   r0   s       r(   get_evagit_role_rootzCmfOrgUnit.get_evagit_role_rootg   sI    ##):#O__gt_u$[&T
\r)   c                     |ri ng }|D ]F  }|j                  |      }||d<   g |d<   ||d<   |r|||j                  <   6|j                  |       H |S )Nr
   r   r   r   )r*   r   append)	r$   r<   r'   r%   r   r   r    r!   child_valuess	            r(   r   zCmfOrgUnit._process_childreno   sr    (b 	3E 000FL(1L%)+L&%+L"*6ehh'$$\2	3 r)   c                 h    |D ]-  }|d   |k(  rd|d<    y| j                  |d   |      s(d|d<    y y)Nr   Tfocusr   r   F)_open_focus)r$   treefocus_idnodes       r(   rP   zCmfOrgUnit._open_focus}   sM     	DDzX% $Wl!3X>!%X	 r)   c           	         | j                  ||      }| j                  |d   |      sd|d<   | j                  ||      }| j                  ||      }| j	                  |      }| j                         }	| j                         }
| j                         }d } ||       ||
       ||       ||       ||       ||	       ||      gS )Nr   TrO   )r;   c                 f    | j                         j                         D ]  \  }}|du sd | |<    | S )N.)copyitems)r   kvs      r(   fix_idz(CmfOrgUnit.get_full_tree.<locals>.fix_id   s;    		))+ #18"DG# Kr)   )r,   rP   r1   r6   r=   rB   rF   rJ   )r$   r'   r%   rR   r;   r+   
group_rootcompany_rootperson_rootjob_rootprojectrole_rootevagit_role_rootrZ   s                r(   r   zCmfOrgUnit.get_full_tree   s    ))*mD{<8(C#'K ((]C
++JF***E##%335335
	 {#V,<%=vj?QSYZeSf|$fX&6?O8PR 	Rr)   c                    | j                  dg       | j                  D ]  }t        |t        j                        r#|j                  dg       |j                          @t        |t        j                        s[|j                  ddg       d|j                  _        |j                          |j                  d        y )Nr   tree_parentr   T)	only_data)load_fieldsr   
isinstancer   r   _recalc_role_pathr   rb   
is_changed_calc_cache_pathsave)selfrS   s     r(   rf   zCmfOrgUnit._recalc_role_path   s    ,(OO 	*D$ 1 12  ,0&&(D&..1  -1A!BC.2  +%%'		D	)	*r)   c                 ,    dg}t         |          |z   S )Nrb   )supersave_preload_fields)rj   r   	__class__s     r(   rm   zCmfOrgUnit.save_preload_fields   s"    
 w*,v55r)   c                    | j                   j                  s,| j                  j                  s| j                  j                  r| j	                          | j
                  j                  rt        j                  j                  | j                  g       t        j                  j                          t        j                  j                          t        j                  j                          t        | <  di |S )N )r	   rg   r   rb   rf   r   r   CmfAccessListsubject_changed_hookr   CmfProjectPermSchemetrigger_reloadCmfProjectRoleAssignCmfProjectNotifySchemerl   ri   )rj   kwargsrn   s     r(   ri   zCmfOrgUnit.save   s     		$$99''##..""$ ??%%  55twwi@''668''668))88:w|%f%%r)   c                     fdg }|r|j                  dd|g       |r.|j                  d      r|j                  dd |d         g       |r||g}n|}t        |   d|fi |S )Nc           	          g }| D ]n  }t         j                  |d   ddg      }t        |dd       r/| |j                  D cg c]  }d|j                  i c}      z  }|j                  |d          p |S c c}w )Nr   Tr   )simpler   )cmfutilget_obj_by_idgetattrr   r   rL   )r   resrS   objall_childrens       r(   r   z9CmfOrgUnit.tree_parent_options_list.<locals>.all_children   s    C" '++DJt\N+[3d3<3>>(RC$(RSSC

4:&	'
 J )Ss   A9r   z!=r   zNOT INrb   )rL   getrl   field_options_list)r$   r9   	object_idobject_fieldsrw   filter_addonr   rn   s         @r(   tree_parent_options_listz#CmfOrgUnit.tree_parent_options_list   s    	 tY 78]..|<xmL>Y1Z [\l+F!Fw)-J6JJr)   c                     |dk(  r | j                   dd|i|S |dk(  r|sdg}nd|vr|j                  d       t        |   ||fd|i|S )Nrb   r9   headr   r   rp   )r   rL   rl   r   )r$   relation_field_namer9   r   rw   rn   s        r(   r   zCmfOrgUnit.field_options_list   sj    -//3//HvHHH&("'h'w)*=v_f_X^__r)   )FN)FNT)flatF)FNr   T)NNN)NN)__name__
__module____qualname__	api_allowcmfr   	CmfEntityapi_methodsclassmethodr,   r1   r6   r=   rB   rF   rJ   r   rP   r   rf   rm   ri   r   r   __classcell__)rn   s   @r(   r   r      s/   I**&&226
 
K  <      $           R R.
*6&$ K K* ` `r)   r   )cmf.includecmf.models.cmf_translit_coder   r   cmf_translit_codeCmfTranslitCoder   r   rp   r)   r(   <module>r      s7     #^`--==szz?S?S ^`r)   