U
    r[c                     @   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d!d
dZ	dd Z
dddddZdd Zdd Zd" f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parentNc                 C   s:   | g}d| j kr|S | jj|dD ]}||  q"|S )uN   
        Список всех нод проекта
        :return:
        
tree_nodes)fields)r
   r	   loadextendget_tree_nodes_recursive)selfr
   Z	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 )Nr   )delete)r   r   r   _argskwargsr   r   r   delete_node#   s    zCmfTreeNode.delete_nodec                 C   s   | j sd| _ | jdd d S )NT)Z	only_data)tree_node_is_branchsaver   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_parentvalue
isinstancemodels
CmfProjectr   r   ZCmfError)r   r   r   r   r   _node_parent+   s    
zCmfTreeNode._node_parentc                    sZ   | j rL|  }|rL|rL| D ],}d| j d|j }| j|j| j|d qt j||S )Nu   Создан u    в проекте )Z	person_idr   msg)	is_newr#   Zall_relation_personsZverbose_namer   Z_place_notifyidsuperr   )r   notifyargsr   ZprojectZpersonr$   	__class__r   r   r   7   s    zCmfTreeNode.save
   Копия)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dkrr|	|
_n|	j|
_|	|
_|r|r|
jj	
|||
_| d|
j |
_|jD ]}t|jdF}tj|
|jd}||  |  |
jj	
|jj	|jj	|
_W 5 Q R X |jj	|
jj	kr>|
jj	
|jj	|jj	|
_n<tj|jj	|
jj	krz|
jj	
tj|jj	|jj	|
_|js|jr|jr|jj	|
jj	kr|
jj	
|jj	|jj	|
_nD|jrtj|jj	|
jj	kr|
jj	
tj|jj	|jj	|
_|jr8|jj	|
jj	kr8|
jj	
|jj	|jj	|
_q|jrtj|jj	|
jj	kr|
jj	
tj|jj	|jj	|
_qt|
dr|
j|
_|
jj|
_|
  |
  n|
  |r|
jr|j  D ]$}|j!|jj	|
jj	||||d q|
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"    rb)r   r   
text_draft)r   name_startswithfind_to
replace_to)"splitvarsr!   getZclone
class_namer   r   r   r   replaceZattachmentsopenZfull_path_fileZCmfAttachmentZupload_filereadr   r0   r&   ZurlurllibparseZquoteZurl_previewZurl_preview_imghasattrr3   oldZ
do_approver   r	   r   copy_tree_node)r-   r.   r   r4   r5   r6   Zsrc_model_nameZsrc_tree_nodeZdst_model_nameZdst_tree_noderB   ZattachfZ
new_attachr   r   r   r   rB   C   sz     
 
$"

  
zCmfTreeNode.copy_tree_nodec                    s   t   dg S )Nztree_parent.tree_sort_children)r'   save_preload_fieldsr   r*   r   r   rD      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)rE   Zreversz>=)r%   r   r   r&   typesgetr   Z
move_belowZ
move_abover'   _calc_orderno)r   Z_filterZmax_nameZmin_objr*   r   r   rH      s      zCmfTreeNode._calc_orderno)N)T)Fr,   NN)__name__
__module____qualname__commonr
   cmf_tree_noder   Zui_meta_skipr   r   r   r   r   r#   r   staticmethodstrrB   rD   rH   __classcell__r   r   r*   r   r      s&   

?r   )r>   Zcmf.includeZcommon.fields.cmf_tree_noderL   r
   rM   r   r   r   r   r   <module>   s   