U
    gh                     @   s*   d dl T ddlmZ G dd dejZdS )    )*   )cmf_active_ver_entityc                       s   e Zd ZdZddgZejjdddg Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Z fddZ fddZd" fdd	Zd#ddZeddddd fdd
Zd$ fd d!	Z  ZS )%CmfActiveVerEntityTnameZ	cmf_ownercreate_new_cmf_verrestore_cmf_verlist_cmf_verc                 C   s   |  ddddg | js$tddd | jj}| jj}d| _| d	| j | _| jdd
 t||dd| jd d}| j	f |}| j
r| j
D ]&}|j|kr||_|jr|jdd
 q| | | jj}||_|jdd
 dS )u7   Создание новой версии объектаr   zcmf_ver_head.cmf_ver_head2cur
tree_nodesztree_nodes.tree_parentu   Ошибка! Попытка создать новую версию из не-cur объекта. Используйте для этого метод restore_cmf_verTabortFz-vZ	only_data   )r   codeZcopy_allcmf_ver_curcmf_ver_numberN)load_fieldsr   	cmf_alertr   valuer   r   savedictcopyr
   Ztree_parent
is_changed_after_create_new_cmf_vercmf_ver_headcmf_ver_head2cur)selfr   r   kwargsnew_curZnodeZhead_obj r   (./common/models/cmf_active_ver_entity.pyr      s0    



z%CmfActiveVerEntity.create_new_cmf_verc                 C   s   dS )u~   Хук для расширения в дочерних классах. По умолчанию ничего не делает.Nr   )r   r   r   r   r    r   5   s    z,CmfActiveVerEntity._after_create_new_cmf_verc                 C   s   t ddd dS )u'   Востановление версииZTODO1Tr   N)r   r   r   r   r    r   9   s    z"CmfActiveVerEntity.restore_cmf_verc                 C   s`   d| _ d| _| j| j dd}| j d|jdd   |_d|_| |_d|_ |  || _	d S )	NTr   z-head)r   :Hiu]   ### Технический объект! Обратитесь к разработчику ###F)
r   r   	__class__r   
class_nameidr   r   r   r   )r   headr   r   r    _init_new_cmf_ver_obj=   s    z(CmfActiveVerEntity._init_new_cmf_ver_objc                 C   sX   d}| j j| jddgdd }| jD ]}| | jr$| | ||< d}q$|rT|jdd d S )NFTcmf_ver_head2cur_id)r%   only_ver_headfieldsr   r   )r#   listZcmf_ver_head_idcmf_ver_head_sync_fieldsr   r   )r   Zchangedr&   Z
field_namer   r   r    _cmf_ver_head_syncI   s    

z%CmfActiveVerEntity._cmf_ver_head_syncc                 C   s   | j j| j dS )Nr"   )r%   r   
startswithr$   r!   r   r   r    _cmf_ver_is_linkU   s    z#CmfActiveVerEntity._cmf_ver_is_linkc                    s   |   r(| jstddd t j||S | j}d}| jrX|sBd}nt|dd | jkrXd}|rd|   | j	rr| 
  t j||S )Nu4   Нельзя редактирвоать cmf_ver headTr   Fr   )r/   Zis_newr   superr   r   getattrr   r'   r   r-   )r   argsr   r   Zneed_init_headr#   r   r    r   X   s     zCmfActiveVerEntity.savec                    s   t   | j dddg S )Nr   r   r   )r0   save_preload_fieldsr,   r!   r3   r   r    r4   n   s    z&CmfActiveVerEntity.save_preload_fieldsNFc                    s.   |rd|kr| d t jf ||d|S )Nr(   )r*   force)appendr0   r   )r   r*   r5   r   r3   r   r    r   q   s    
zCmfActiveVerEntity.load_fieldsc                 C   s@   |  dg |sg }|ddg | jdd| jgdd|dgdS )Nr   r%   r   =T)filterinclude_verZinclude_templatesr*   Zorderby)r   extendZslistr   )r   r*   r   r   r    r	   w   s    
zCmfActiveVerEntity.list_cmf_ver)full_fields_loadr8   r9   r)   c                   sr   |  |}|sg }|s6|s6|r,|dddggndddg}|rV|rL|dddggndddg}t j|||d|}|S )u   
        Т.к. по show definition люди придут за гайдом по использованию filter именно сюда, дублирую доку
        https://bcrm.carbonsoft.ru/project/Document/DOC-000282
        r   r7   Tr   z!=N)r;   r8   )Z_default_kwargsr0   _count)clsr;   r8   r9   r)   r2   r   retr3   r   r    r<      s    
zCmfActiveVerEntity._countc                    s*   | j j| j dsd S d}t |S )Nr"   T)r%   r   r.   r$   r0   mark_full_search)r   Zceleryr3   r   r    r?      s    z#CmfActiveVerEntity.mark_full_search)NF)N)T)__name__
__module____qualname__Zabstractr,   r   r   Zapi_methodsr   r   r   r'   r-   r/   r   r4   r   r	   classmethodr<   r?   __classcell__r   r   r3   r    r      s(    
r   N)Zcmf.includer*   r   r   r   r   r   r    <module>   s   