
    3j8                         d dl  d dlZ G d dej                  j                  j
                  ej                  j                        Zy)    )*Nc                   |    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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 )N   Структура)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&   z4CmfOrgUnit.get_struct_root_old.<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_root_oldzCmfOrgUnit.get_struct_root_old   sh    ''-A'BRRZgRh#+K *D $H"F	/ 	/( 	[!r)   c                 `   ddddd}d|d<   d|d<   d	|d
<   d |d<   g |d<   |sdg}ddg}nt        |      dgz   }t        |      ddgz   }i }t        j                  j                  |      D ]%  }|j                  }g |d<   d|d<   d|d
<   |||d   <   ' |j                         D ]b  }|d   d k(  r|d   j                  |        |d   |vr"t        j                  d|d    d|d           I||d      d   j                  |       d t        j                  j                  |      D ]  }|j                  }d	|d
<   g |d<   d|d<   d|d
<   |d   d k(  r|d   j                  |       @|d   |vr"t        j                  d|d    d|d           i||d      d   j                  |        |S )Nr   r   zCmfOrgUnit:5
class_namer	   r   r   r   r   r   r   Tr   r   r   r   r   r
   flatFu   CmfOrgUnit.get_full_tree: У u+    несуществующий tree_parent: )
r   r   r   slist__dict__valuesappendgdebugr   )	r$   r'   r%   r+   org_unit_filter_fieldsrole_filter_fieldsorg_unit_maporg_unitroles	            r(   get_struct_rootzCmfOrgUnit.get_struct_root*   s|    &2;OYgo}~#+K *D $H"F$&L!&6%7""2H!=%)-%8<L;M%M"!%m!48H(7S!S
 ))//7M/N 	4H((H%'H\"$*H[!!&HX+3L$(	4 %++- 	TH()T1L)00:()=77GGrs{  }M  tN  sO  P  Q"234\BII(S	T NN((0B(C 	LD==D!DN!#D &D"DN$%-L)006$%\97T
|Cnos  uE  pF  oG  H  I./0>EEdK	L r)   c                 <    ddddd}d|d<   d|d<   g |d	<   d |d
<   |S )NCmfPersonGroupu   ГруппыzCmfPersonGroup:5r.   groupr   zCmfPersonGroup:2r   r   r    r$   r'   r%   r   s       r(   get_groups_rootzCmfOrgUnit.get_groups_root_   sA     /Pbj|}#['T
  \Vr)   c                     ddddd}d|d<   d|d<   | j                  t        j                  j                  d	|
      ||d      |d<   d |d<   |S )Nr>   u   Мои КомпанииzCmfPersonGroup:6r.   companyr   zCmfCompany:3r   T)is_internalr   r   r   r   )_process_children_simpler   
CmfCompanyr1   rA   s       r(   get_company_rootzCmfOrgUnit.get_company_rootk   s{     /8Q[m  vH  I%[#T
 99&:K:K:Q:Q^bkx:Q:y  |F6CRI\V r)   c                     ddddd}d|d<   d|d<   g |d	<   |r:t         j                  j                  g d
|      }| j                  |||d      |d	<   |S )Nr>   u   ПользователиzCmfPersonGroup:7r.   r   r   zCmfPerson:4r   r   )
user_localz==T)filterr   r   )r   	CmfPersonr1   rF   )r$   r'   r%   load_personsr   childrens         r(   get_persons_rootzCmfOrgUnit.get_persons_root{   s    
 /8R\n  wI  J$["T
\''--1- . H "%!=!=*mR"D r)   c                 2    ddddd}d|d<   d|d<   g |d<   |S )	NCmfJobu#   Штатное расписаниеzCmfJob:5r.   jobr   r   r   r@   rA   s       r(   get_job_rootzCmfOrgUnit.get_job_root   s7     '0U_iq{|![T
\r)   c                 2    ddddd}d|d<   d|d<   g |d<   |S )	NCmfProjectRoleu   Проектные ролиzCmfProjectRole:6r.   pjroler   r   r   r@   rA   s       r(   get_projectrole_rootzCmfOrgUnit.get_projectrole_root   s>     /8U_q  zL  M$['T
\r)   c                 2    ddddd}d|d<   d|d<   g |d<   |S )	NCmfEvagitRoleu   Git ролиzCmfEvagitRole:7r.   egroler   r   r   r@   rA   s       r(   get_evagit_role_rootzCmfOrgUnit.get_evagit_role_root   s6     .~O`hyz$[&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   r4   	r$   rN   r'   r%   r   r   r    r!   child_valuess	            r(   r   zCmfOrgUnit._process_children   sr    (b 	3E 000FL(1L%)+L&%+L"*6ehh'$$\2	3 r)   c                     |ri ng }|D ]@  }|j                   }||d<   g |d<   ||d<   |r|||j                  <   0|j                  |       B |S )Nr   r   r   )r2   r   r4   r]   s	            r(   rF   z#CmfOrgUnit._process_children_simple   sh    (b 	3E >>L(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(   rb   zCmfOrgUnit._open_focus   sM     	DDzX% $Wl!3X>!%X	 r)   c           	      :   t         j                  d       | j                  ||      }t         j                  d       | j                  |d   |      sd|d<   t         j                  d       | j	                  ||      }t         j                  d       | j                  ||      }t         j                  d       | j                  |	      }t         j                  d
       | j                         }	t         j                  d       | j                         }
t         j                  d       | j                         }t         j                  d       d } ||       ||
       ||       ||       ||       ||	       ||      g}t         j                  d       |S )Nzget_full_tree Startzget_full_tree get_struct_rootr   Tra   zget_full_tree _open_focuszget_full_tree get_groups_rootzget_full_tree get_company_root)rM   zget_full_tree get_persons_rootzget_full_tree get_job_rootz"get_full_tree get_projectrole_rootz"get_full_tree get_evagit_role_rootc                 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)   zget_full_tree Done)
r5   r6   r<   rb   rB   rH   rO   rS   rW   r[   )r$   r'   r%   rd   rM   r+   
group_rootcompany_rootperson_rootjob_rootprojectrole_rootevagit_role_rootrl   ress                 r(   r   zCmfOrgUnit.get_full_tree   sc   	%&))*mD	/0{<8(C#'K 	+,((]C
	/0++JF	01***E	01##%	,-335	45335	45
	 k"F+;$<fZ>PRXYdRe|$fX&6?O8P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   ru   
is_changed_calc_cache_pathsave)selfre   s     r(   ry   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 )Nru   )supersave_preload_fields)r}   r   	__class__s     r(   r   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 )Nr@   )r	   rz   r   ru   ry   r   r   CmfAccessListsubject_changed_hookr   CmfProjectPermSchemetrigger_reloadCmfProjectRoleAssignCmfProjectNotifySchemer   r|   )r}   kwargsr   s     r(   r|   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   r4   )r   rs   re   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 INru   )r4   getr   field_options_list)r$   rK   	object_idobject_fieldsr   filter_addonr   r   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 )Nru   rK   headr   r   r@   )r   r4   r   r   )r$   relation_field_namerK   r   r   r   s        r(   r   zCmfOrgUnit.field_options_list0  sj    -//3//HvHHH&("'h'w)*=v_f_X^__r)   )FN)FNT)r0   F)FNr   T)NNN)NN)__name__
__module____qualname__	api_allowcmfr   	CmfEntityapi_methodsclassmethodr,   r<   rB   rH   rO   rS   rW   r[   r   rF   rb   r   ry   r   r|   r   r   __classcell__)r   s   @r(   r   r      sW   I**&&226
 
K  < 2 2h 	 	    (             ! !F
*6&$ K K* ` `r)   r   )cmf.includecmf.models.cmf_translit_coder   r   cmf_translit_codeCmfTranslitCoder   r   r@   r)   r(   <module>r      s7     #t`--==szz?S?S t`r)   