U
    ȜhiU                     @   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 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dd$e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 ddi|}| 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_numberneed_init_headN)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   )r0   is_newr   superr   r   getattrr   r(   r   r.   )r   argsr   r   r   r$   r    r!   r   X   s     zCmfActiveVerEntity.savec                    s4   | j r| js|   | jr"|   t j|| d S )N)r1   r   r(   r   r.   r2   _save_import)r   r4   r   r5   r    r!   r6   n   s
    zCmfActiveVerEntity._save_importc                    s   t   | j dddg S )Nr   r   r   )r2   save_preload_fieldsr-   r"   r5   r    r!   r7   w   s    z&CmfActiveVerEntity.save_preload_fieldsNFc                    sN   |rd|kr| d | jr6t jf ||dd|S t jf ||d|S )Nr)   F)r+   forceZver_resolve_head)r+   r8   )appendr0   r2   r   )r   r+   r8   r   r5   r    r!   r   z   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	      s    
zCmfActiveVerEntity.list_cmf_ver)full_fields_loadr;   r<   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   r:   Tr   z!=N)r>   r;   )Z_default_kwargsr2   _count)clsr>   r;   r<   r*   r4   r   retr5   r    r!   r?      s    
zCmfActiveVerEntity._countc                    s*   | j j| j dsd S d}t |S )Nr#   T)r&   r   r/   r%   r2   mark_full_search)r   Zceleryr5   r    r!   rB      s    z#CmfActiveVerEntity.mark_full_search)r   c                   s*   t  j||}|r|  |jdd |S )NTr   )r2   r   r(   r   )r   r   r4   r   resr5   r    r!   r      s
    zCmfActiveVerEntity.copy)NF)N)T)__name__
__module____qualname__Zabstractr-   r   r   Zapi_methodsr   r   r   r(   r.   r0   r   r6   r7   r   r	   classmethodr?   rB   boolr   __classcell__r    r    r5   r!   r      s,    		
r   N)Zcmf.includer+   r   r   r    r    r    r!   <module>   s   