B
    Yf1                 @   s2   d dl Z d dlT d dlZG dd dejjjZdS )    N)*c                   s   e Zd Zejjjjd ZdddddddgZejjjj	d	d
g Z	d!ddZ
dd ZdddddZdd Zdd Zed"eedddZ fddZ fdd Z  ZS )#CmfTreeNode)tree_fieldsZtree_parent_idordernonameZsys_typehas_tree_nodesZtree_hiddenparentdelete_nodecopy_tree_nodeNc             K   sP   |r| j jn| g}d| jkr |S x*| jj|dD ]}||j||d q0W |S )uN   
        Список всех нод проекта
        :return:
        
tree_nodes)fields)r   only_id)idvaluer   r   loadextendget_tree_nodes_recursive)selfr   r   Z_kwargsZ	node_listnode r    ./common/models/cmf_tree_node.pyr      s    
z$CmfTreeNode.get_tree_nodes_recursivec             C   s   | j S )N)r   )r   r   r   r   has_tree_nodes_hook$   s    zCmfTreeNode.has_tree_nodes_hookFT)force	recursivec            O   s   | j f ||d|S )N)r   r   )delete)r   r   r   Z_argskwargsr   r   r   r	   '   s    zCmfTreeNode.delete_nodec             C   s   | j sd| _ | jdd d S )NT)Z	only_data)tree_node_is_branchZsave)r   r   r   r   tree_child_restore_hook*   s    z#CmfTreeNode.tree_child_restore_hookc             C   s>   | j j}|r:t|tjr|S |j s2td|| |jjS d S )Nu@   У узла дерева отсутствует родитель)tree_parentr   
isinstancemodels
CmfProjectr   r   ZCmfError)r   r   r   r   r   _node_parent/   s    
zCmfTreeNode._node_parent
   Копия)src_tree_node_iddst_tree_node_idc          	   C   s   |  dd }tt| j| ddddddd	gd
}| dd }tt| j|dgd
}	|jj}
|rt|rt|
||}
| d|
 }
|	jdkr|	}n|	j}|j	|
d||	d}|r|j
rx0|j D ]"}|j|jj|jj||||d qW |S )u~   
        https://bcrm.carbonsoft.ru/project/Document/DOC-006119#spec-005912-b
        Копирование ноды
        :r   r   r   textzattachments.urlZtagszattachments.url_previewzattachments.url_preview_img)r   r    r!   T)r   Zcopy_allr   r   )r   name_startswithfind_to
replace_to)splitvarsr    getr   r   replace
class_namer   copyr   r   r   r
   r   )r$   r%   r   r)   r*   r+   Zsrc_model_nameZsrc_tree_nodeZdst_model_nameZdst_tree_nodenew_namer   r
   r   r   r   r   r
   ;   s(    


zCmfTreeNode.copy_tree_nodec                s   t   dg S )Nztree_parent.tree_sort_children)supersave_preload_fields)r   )	__class__r   r   r4   W   s    zCmfTreeNode.save_preload_fieldsc                s   | j r| jrd S | jrdd| jgdd| jgg}t| jdd| jg|gdgd}|rn| j| j|j|d	d
| _d S t| jdd| jg|gdgd}|r| j| j|j|d	d
| _d S t	 
  d S )Nr   z!=r   z==r   z<=z-name)filterZorder_byF)r6   Zreversz>=)Zis_newr   r   r   typesgetr   Z
move_belowZ
move_abover3   _calc_orderno)r   Z_filterZmax_nameZmin_obj)r5   r   r   r9   Z   s      zCmfTreeNode._calc_orderno)NN)Fr#   NN)__name__
__module____qualname__commonr   cmf_tree_noder   Zui_meta_skipr   Zapi_methodsr   r   r	   r   r"   staticmethodstrr
   r4   r9   __classcell__r   r   )r5   r   r      s(   

r   )ZurllibZcmf.includeZcommon.fields.cmf_tree_noder=   r   r>   r   r   r   r   r   <module>   s   