U
    Įwhj                     @   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 fddZed-eedddZ fdd Z fd!d"Zd#d$ Z fd%d&Zdd' fd(d)
Zdd' 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   sL   |r| j jn| g}d| jkr |S | jj|dD ]}||j||d q.|S )uN   
        Список всех нод проекта
        :return:
        
tree_nodes)fields)r   only_id)idvaluer   r   loadextendget_tree_nodes_recursive)selfr   r   _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 )Nr   )delete)r   r   r   _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_branchsaver   r   r   r   tree_child_restore_hook*   s    z#CmfTreeNode.tree_child_restore_hookc                 C   sD   | j j}|r@t|tjtjfr"|S |j s8td|| |jjS d S )Nu@   У узла дерева отсутствует родитель)	tree_parentr   
isinstancemodels
CmfProjectZCmfAssetSchemer   r   ZCmfError)r   r%   r   r   r   _node_parent/   s    
zCmfTreeNode._node_parentc              	      sX   t  j||}|dg |jjrT|jjsTd|j_t  |jjdd W 5 Q R X |S )Nztree_parent.tree_node_is_branchTr!   )	supercopyload_fieldsr%   Zis_not_nullr"   ZcmfutilZdisable_aclr#   r   argsr    res	__class__r   r   r+   ;   s    
zCmfTreeNode.copy
   Копия)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dddgd
}	|jj}
|rz|rz|
||}
| d|
 }
|	jdkr|	}n|	j}|j	|
d||	|	j
d}|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   zparent.tree_node_is_branchprojectzproject.logic_prefix r(   T)r   Zcopy_allr   r%   r7   )r   name_startswithfind_to
replace_to)splitvarsr'   getr   r   replace
class_namer   r+   r7   r"   r   r   r
   r   )r3   r4   r   r9   r:   r;   Zsrc_model_nameZsrc_tree_nodeZdst_model_nameZdst_tree_nodenew_namer   r
   r   r   r   r   r
   E   sF     
    
  
  zCmfTreeNode.copy_tree_nodec                    s   t   dg S )Nztree_parent.tree_sort_children)r*   save_preload_fieldsr   r0   r   r   rB   b   s    zCmfTreeNode.save_preload_fieldsc                    s   | j r| jrd S | jr| js(tddd dd| jgdd| jgg}t| jdd	| jg|gd
gd}|r| 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 )Nu   Не заполнено имя!T)abortr   z!=r%   z==r   z<=z-name)filterZorder_byF)rD   Zreversz>=)Zis_newr   r%   r   Z	cmf_alertr   typesgetZ
move_belowZ
move_abover*   _calc_orderno)r   Z_filterZmax_nameZmin_objr0   r   r   rG   e   s      zCmfTreeNode._calc_ordernoc                 C   sD   |  dddg | js | js d S | jr@| jjs@d| j_| j  d S )Nz!tree_parent.has_children_archivedcmf_archivedhas_children_archivedT)r,   rH   rI   r%   r#   r   r   r   r   has_children_archived_hook~   s    z&CmfTreeNode.has_children_archived_hookc                    s   t  j||}|   |S r   )r*   r#   rJ   r-   r0   r   r   r#      s    zCmfTreeNode.save)skip_tree_movec                   sR   t  j| f|d|i| |   | j  | jD ]}|j|ddi| q4| S )NrK   T)r*   archiverJ   r   r   r   rK   r.   r    childr0   r   r   rL      s    

zCmfTreeNode.archivec                   sJ   t  j|d|i| | jdgdd | jD ]}|j|ddi| q,| S )NrK   r   T)Zinclude_archived)r*   archive_restorer,   r   rM   r0   r   r   rO      s
    
zCmfTreeNode.archive_restore)NN)Fr2   NN)__name__
__module____qualname__commonr   cmf_tree_noder   Zui_meta_skipr   Zapi_methodsr   r   r	   r$   r)   r+   staticmethodstrr
   rB   rG   rJ   r#   rL   rO   __classcell__r   r   r0   r   r      s6   	


r   )ZurllibZcmf.includeZcommon.fields.cmf_tree_noderS   r   rT   r   r   r   r   r   <module>   s   