
    @i0                     X    d dl Z d dlT d dlZ G d dej        j        j                  ZdS )    N)*c                   |    e Zd Zej        j        j        j        dz   Zg dZej        j        j        j	        ddgz   Z	d"dZ
d Zdd	d
dZd Zd Z fdZed#dedefd            Z fdZ fdZd Ze ed	dd          d$defd                        Zd%defdZd Zd Z fdZdd fd 
Zdd fd!
Z xZS )&CmfTreeNode)tree_fields)tree_parent_idordernonamesys_typehas_tree_nodestree_hiddenparentdelete_nodecopy_tree_nodeNc                     |r| j         j        n| g}d| j        vr|S | j                            |          D ],}|                    |                    ||                     -|S )uN   
        Список всех нод проекта
        :return:
        
tree_nodesfields)r   only_id)idvaluer   r   loadextendget_tree_nodes_recursive)selfr   r   _kwargs	node_listnodes          ./common/models/cmf_tree_node.pyr   z$CmfTreeNode.get_tree_nodes_recursive   s    
 '.7TW]]48	t{**O(((77 	\ 	\DT::&RY:ZZ[[[[    c                     | j         S )N)r   r   s    r   has_tree_nodes_hookzCmfTreeNode.has_tree_nodes_hook$   s    ""r   FTforce	recursivec                    |                      g d           | j        r | j        j        r|                                   | j        d||d|S )N)tree_parentztree_parent.cmf_ownertree_parent.sl_owner_lockr#    )load_fieldsr'   sl_owner_lock _check_tree_parent_sl_owner_lockdelete)r   r$   r%   _argskwargss        r   r   zCmfTreeNode.delete_node'   sf    ^^^___ 	4 0 > 	411333t{F)FFvFFFr   c                 R    | j         sd| _         |                     d           d S d S )NT	only_data)tree_node_is_branchsaver!   s    r   tree_child_restore_hookz#CmfTreeNode.tree_child_restore_hook-   s9    ' 	&'+D$III%%%%%	& 	&r   c                     | j         j        }|r^t          |t          j        t          j        f          r|S |j                                        st          d||           |j        j        S d S )Nu@   У узла дерева отсутствует родитель)	r'   r   
isinstancemodels
CmfProjectCmfAssetSchemer   r   CmfError)r   r'   s     r   _node_parentzCmfTreeNode._node_parent2   s}     &, 	,+(96;P'QRR #""%**,, vacnptuuu%++	, 	,r   c                 F    t                      j        |i |}|                    dg           |j        j        rd|j        j        sXd|j        _        t                                          5  |j                            d           d d d            n# 1 swxY w Y   |S )Nztree_parent.tree_node_is_branchTr1   )	supercopyr*   r'   is_not_nullr3   cmfutildisable_aclr4   r   argsr/   res	__class__s       r   r?   zCmfTreeNode.copy>   s    egglD+F++:;<<<?& 	5s/R 	526CO/$$&& 5 5$$t$4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5
s   .BBB
   Копияsrc_tree_node_iddst_tree_node_idc           	         |                      d          d         }t          t                    |                             | g d          }|                     d          d         }t          t                    |                             |g d          }	|j        j        }
|r|r|
                    ||          }
| d|
 }
|	j        dk    r|	}n|	j        }|	                    |
d||	|	j
        	          }|rR|j        rK|j                                        D ]1}|                    |j        j        |j        j        ||||
           2|S )u~   
        https://bcrm.carbonsoft.ru/project/Document/DOC-006119#spec-005912-b
        Копирование ноды
        :r   )r3   r   textzattachments.urltagszattachments.url_previewzattachments.url_preview_img)r   r   )zparent.tree_node_is_branchr3   projectzproject.logic_prefix r9   T)r	   copy_allr   r'   rN   )r%   name_startswithfind_to
replace_to)splitvarsr8   getr	   r   replace
class_namer   r?   rN   r3   r   r   r   r   )rH   rI   r%   rQ   rR   rS   src_model_namesrc_tree_nodedst_model_namedst_tree_nodenew_namer   r   r   s                 r   r   zCmfTreeNode.copy_tree_nodeH   s    *//44Q7V^488 )c )c )c 9 d d *//44Q7V^488<L Vd Vd Vd8 e e %+ 	=z 	=''<<H%2222#|33"FF")F&++D39}^k^s , u u 	m; 	m%05577 m m##DGM>3D3JV_4CWak $ m m m mr   c                 L    t                                                      dgz   S )Nztree_parent.tree_sort_children)r>   save_preload_fields)r   rF   s    r   r_   zCmfTreeNode.save_preload_fieldse   s"    ww**,,0P/QQQr   c                 :   | j         r| j        rd S | j        r| j        st	          dd           dd| j        gdd| j        gg}t          |                               dd	| j        g|gd
g          }|r*|                     | j        |j        |d          | _        d S t          |                               dd| j        g|gdg          }|r*| 	                    | j        |j        |d          | _        d S t                                                       d S )Nu   Не заполнено имя!Tabortr   !=r'   z==r	   z<=z-name)filterorder_byF)rd   reversz>=)is_newr   r'   r	   	cmf_alertr   typesget
move_below
move_abover>   _calc_orderno)r   _filtermax_namemin_objrF   s       r   rm   zCmfTreeNode._calc_ordernoh   s4   { 	dl 	F 	 9 I;4HHHHdDG,}dDDT.UVGDzzdi/H'.R^e]fggH #twG\abbt**//642KW1Uag`h/ii #'??47GJw_d?#e#eDLFr   c                     | j         j        s| j        j        sd S |                     g d           | j        s	| j        sd S | j         r3| j         j        s)d| j         _        | j                                          d S d S d S )N)!tree_parent.has_children_archivedcmf_archivedhas_children_archivedT)r'   
is_changedrt   r*   rs   r4   r!   s    r   _calc_has_children_archivedz'CmfTreeNode._calc_has_children_archived   s      + 	t/I/T 	Fggghhh! 	T%? 	F 	$D$4$J 	$59D2!!#####	$ 	$ 	$ 	$r   u4   Обновление структуры дерева)	only_oncedescriptionshow_bg_progressbarobj_idc           	         t                               |           }t                               | ddg          }|st                              d|            d S g }|j                                        D ]8}|                    |                    dd| gdd|j	        gg                     9t          |          D ](\  }}|j	        |_	        |                                 |r	 )d S )	Nr   r   r   zDsubtree_update_parent_job(%s): obj not found. May be it was deleted.r'   =rc   )rd   )rA   get_model_by_idget_obj_by_idloggingwarningr   related_modelsr   listr   	enumerater4   )rz   update_bg_progressbar	obj_modelobjsub_objsmodelnnsub_objs           r   subtree_update_parent_jobz%CmfTreeNode.subtree_update_parent_job   s    ++F33	 ##FD(3C#DD 	OObdjkkkF)88:: 	a 	aEOO

M3#?(DRUR\A]"^
__a a a a
 'x00 	 	MR ZGNLLNNN$  	 	r   force_fgc                 P   t           j        }	 |st          j                                        rdt           _        t           j        r"|                     | j        j        d           n!t          | j        | j        j        g           |t           _        d S # |t           _        w xY w)NTF)r   )rD   )	g$_subtree_update_parent_job__force_fgr8   CmfDeferredJobis_jobr   r   r   schedule_deferred_job)r   r   'old_subtree_update_parent_job__force_fgs      r   _subtree_update_parent_jobz&CmfTreeNode._subtree_update_parent_job   s    232X/	] >607799 > :>65 \..tw}TY.ZZZZ%d&DDGM?[[[[ 6]A2225\A2\\\\s   A;B B%c                 v   t           j        t           j        k    rd S | j        sd S | j        j        }t           j        j        |k    rrt                              |dg          }t                              | j	        dg          }t          j                            d|j         d|j         d           d S d S )Nr	   r   uZ   Создавать/удалять здесь только владелец объекта u   . Свяжитесь с Tra   )r   current_personsystem_personr'   cmf_owner_idcurrent_userr   rA   r~   r   cmfincluderh   r	   )r   r   	cmf_ownerr'   s       r   r,   z,CmfTreeNode._check_tree_parent_sl_owner_lock   s    q..F 	F'4>,,--lF8-LLI!//0CVH/UUKK!!  #z  @K  @P  #z  #z  js  jx  #z  #z  BF!  G  G  G  G  G -,r   c                     | j         sd S | j        j        ra| j                            d          sI|                     ddg           | j        j        r(|                                  | j         rd| _        d S d S d S d S d S )Nz:Classr(   ztree_parent.cmf_owner_idT)rg   r   r   endswithr*   r'   r+   r,   r!   s    r   _calc_sl_owner_lockzCmfTreeNode._calc_sl_owner_lock   s    { 	F$ 	.T-@-I-I(-S-S 	.9;UVWWW- .55777; .)-D&&&	. 	. 	. 	.. .. .r   c                 d   |                                    t                      j        |i |}| j        sf| j        j        rZt                              d| | j        j        | j                   | 	                    t          | t          j                             |                                  |S )Nz@CmfTreeNode.save(): Need update subtree for %s: parent: %s -> %s)r   )r   r>   r4   rg   r   ru   r   debugoldr   r7   r8   CmfTaskrv   rC   s       r   r4   zCmfTreeNode.save   s      """egglD+F++{ 	t{5 	MM#$($+/4;   ++#D&.99 ,    	((***
r   )skip_tree_movec                    t                      j        | g|R d|i| |                     ddg           | j        r1| j        j        s%d| j        _        | j                                         | j        D ]} |j        |ddi| | S )Nr   rr   r   T)r>   archiver*   r'   rt   r4   r   r   r   rD   r/   childrF   s        r   r   zCmfTreeNode.archive   s    MtMMMNMfMMM=|LMMM 	$D$4$J 	$59D2!!###_ 	@ 	@EEM4??????r   c                     t                      j        |d|i| |                     dgd           | j        D ]} |j        |ddi| | S )Nr   r   T)include_archived)r>   archive_restorer*   r   r   s        r   r   zCmfTreeNode.archive_restore   sw    OnOOOO,$???_ 	H 	HE!E!4GGGGGGr   )NN)FrG   NN)T)F) __name__
__module____qualname__commonr   cmf_tree_noder   ui_meta_skipr   api_methodsr   r"   r   r5   r<   r?   staticmethodstrr   r_   rm   rv   cmf_deferred_jobr   boolr   r,   r   r4   r   r   __classcell__)rF   s   @r   r   r      sm       =.:GJZZL  K --9EI
 
K
   # # # ). G G G G G& & &

, 
, 
,           \8R R R R R         2$ $ $ 2h  D  E  E  E #    E  E \4] ]4 ] ] ] ]"G G G	. 	. 	.      -2        5:           r   r   )urllibcmf.includecommon.fields.cmf_tree_noder   r   r   r   r)   r   r   <module>r      sl         " " " "o o o o o&--9 o o o o or   