
    @iw$                     p    d dl Z d dl d dlZ G d dej                  j
                  j                        Zy)    N)*c                   r    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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_nodec                     |r| j                   j                  n| g}d| j                  vr|S | j                  j	                  |      D ]$  }|j                  |j                  ||             & |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   sr    
 '.TWW]]48	t{{*OO(((7 	\DT::&RY:Z[	\    c                     | j                   S N)r   r   s    r   has_tree_nodes_hookzCmfTreeNode.has_tree_nodes_hook$   s    """r   FTforce	recursivec                    | j                  g d       | j                  j                  r| j                           | 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'   sG    ^_))113t{{F)FvFFr   c                 P    | j                   sd| _         | j                  d       y y )NT	only_data)tree_node_is_branchsaver"   s    r   tree_child_restore_hookz#CmfTreeNode.tree_child_restore_hook-   s&    '''+D$III% (r   c                    | j                   j                  }|rit        |t        j                  t        j
                  f      r|S |j                  j                         st        d||       |j                  j                  S y )Nu@   У узла дерева отсутствует родитель)	r(   r   
isinstancemodels
CmfProjectCmfAssetSchemer   r   CmfError)r   r(   s     r   _node_parentzCmfTreeNode._node_parent2   st     &&,,+(9(96;P;P'QR""%%**,acnptuu%%+++ r   c                 T   t        |   |i |}|j                  dg       |j                  j                  rb|j                  j
                  sLd|j                  _        t        j                         5  |j                  j                  d       d d d        |S |S # 1 sw Y   |S xY w)Nztree_parent.tree_node_is_branchTr2   )	supercopyr+   r(   is_not_nullr4   cmfutildisable_aclr5   r   argsr0   res	__class__s       r   r@   zCmfTreeNode.copy>   s    glD+F+:;<??&&s/R/R26COO/$$& 5$$t$45
s
5
s   4BB'src_tree_node_iddst_tree_node_idc           	         | j                  d      d   }t        t              |   j                  | g d      }|j                  d      d   }t        t              |   j                  |g d      }	|j                  j
                  }
|r|r|
j                  ||      }
| d|
 }
|	j                  dk(  r|	}n|	j                  }|j                  |
d||	|	j                  	      }|rj|j                  r^|j                  j                         D ]A  }|j                  |j                  j
                  |j                  j
                  ||||
       C |S )u~   
        https://bcrm.carbonsoft.ru/project/Document/DOC-006119#spec-005912-b
        Копирование ноды
        :r   )r4   r   textzattachments.urltagszattachments.url_previewzattachments.url_preview_img)r   r   )zparent.tree_node_is_branchr4   projectzproject.logic_prefix r:   T)r	   copy_allr   r(   rN   )r&   name_startswithfind_to
replace_to)splitvarsr9   getr	   r   replace
class_namer   r@   rN   r4   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   sh    *//4Q7V^488 )c 9 d *//4Q7V^488<L Vd8 e %%++z''<H%&az2##|3"F"))F&++D39}^k^s^s , u;;%00557 m##DGGMM>3D3D3J3JV_4CWak $ mm r   c                 (    t         |          dgz   S )Nztree_parent.tree_sort_children)r?   save_preload_fields)r   rG   s    r   r_   zCmfTreeNode.save_preload_fieldse   s    w*,0P/QQQr   c                 N   | j                   r| j                  ry | j                  r| j                  st	        dd       dd| j
                  gdd| j                  gg}t        |       j                  dd	| j                  g|gd
g      }|r/| j                  | j
                  |j
                  |d      | _        y t        |       j                  dd| j                  g|gdg      }|r/| j                  | j
                  |j
                  |d      | _        y t        | -          y )Nu   Не заполнено имя!Tabortr   z!=r(   z==r	   z<=z-name)filterorder_byF)rc   reversz>=)is_newr   r(   r	   	cmf_alertr   typesget
move_below
move_abover?   _calc_orderno)r   _filtermax_namemin_objrG   s       r   rl   zCmfTreeNode._calc_ordernoh   s    {{dll 99;4HdDGG,}dDDTDT.UVGDzdii/H'.R^e]fgH#twwG\abt*//642KW1Uag`h/i#'??477GJJw_d?#eDLr   c                 T   | j                   j                  s| j                  j                  sy | j                  g d       | j                  s| j                  sy | j                   rC| j                   j                  s,d| j                   _        | j                   j                          y y y )N)!tree_parent.has_children_archivedcmf_archivedhas_children_archivedT)r(   
is_changedrs   r+   rr   r5   r"   s    r   _calc_has_children_archivedz'CmfTreeNode._calc_has_children_archived   s       ++t/I/I/T/Tgh!!T%?%?D$4$4$J$J59D2!!# %Kr   c                    t         j                  t         j                  k(  ry | j                  sy | j                  j                  }t         j
                  j                  |k7  rvt        j                  |dg      }t        j                  | j                  dg      }t        j                  j                  d|j                   d|j                   d       y y )Nr	   r   uZ   Создавать/удалять здесь только владелец объекта u   . Свяжитесь с Tra   )gcurrent_personsystem_personr(   cmf_owner_idcurrent_userr   rB   get_obj_by_idr   cmfincluderg   r	   )r   rz   	cmf_ownerr(   s       r   r-   z,CmfTreeNode._check_tree_parent_sl_owner_lock   s    q.''44>>,--lF8-LI!//0C0CVH/UKKK!!$~  @K  @P  @P  Q  Qi  js  jx  jx  iy  #z  BF!  G -r   c                     | j                   sy | j                  j                  rk| j                  j                  d      sO| j	                  ddg       | j
                  j                  r%| j                          | j                   rd| _        y y y y y )Nz:Classr)   ztree_parent.cmf_owner_idT)rf   r   r   endswithr+   r(   r,   r-   r"   s    r   _calc_sl_owner_lockzCmfTreeNode._calc_sl_owner_lock   s    {{$$T-@-@-I-I(-S9;UVW--557;;)-D&  . .T$r   c                 f    | j                          t        |   |i |}| j                          |S r!   )r   r?   r5   ru   rD   s       r   r5   zCmfTreeNode.save   s3      "glD+F+((*
r   )skip_tree_movec                <   t        |   | g|d|i| | j                  ddg       | j                  rA| j                  j                  s+d| j                  _        | j                  j                          | j                  D ]  } |j                  |ddi|  | S )Nr   rq   r   T)r?   archiver+   r(   rs   r5   r   r   r   rE   r0   childrG   s        r   r   zCmfTreeNode.archive   s    MtMNMfM=|LMD$4$4$J$J59D2!!#__ 	@EEMM4???	@r   c                    t        |   |d|i| | j                  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   se    OnOO,$?__ 	HE!E!!4GGG	H r   )NN)Fu
   КопияNN)__name__
__module____qualname__commonr   cmf_tree_noder   ui_meta_skipr   api_methodsr   r#   r   r6   r=   r@   staticmethodstrr   r_   rl   ru   r-   r   r5   r   r   __classcell__)rG   s   @r   r   r      s    ==..::GGJZZLK ----99EEI
 
K
# ). G&

,    8R 2$G	. -2  5:  r   r   )urllibcmf.includecommon.fields.cmf_tree_noder   r   r   r   r*   r   r   <module>r      s,      "y&----99 yr   