U
    ceR                     @   s(   d dl T d dlmZ G dd deZdS )    )*)CmfAssetc                       s   e Zd Z fddZ fddZed fdd	Zdd	 Zd
d Zdd Z	dd Z
dd Zd fdd	Zdd Zdd Z  ZS )r   c                    sF   |    |   |   |   | jjr4tddd t j|| d S )NuQ   Нельзя добавить объект в абстрактную группуT)abort)		_calc_cat_calc_parent_calc_logic_type_calc_workflow	asset_catZis_abstractZ	cmf_alertsupersave)selfargskwargs	__class__ #./modules/asset/models/cmf_asset.pyr      s    zCmfAsset.savec                    s   t   dddddg S )Nzparent.*r   zasset_cat.parentzasset_cat.default_logic_typezasset_cat.is_abstract)r
   save_preload_fieldsr   r   r   r   r      s        zCmfAsset.save_preload_fieldsNc                    st   |dkrX|sg }d }|r,| di  dd }|rXtjj |dgd}|jrX|dd|jgg}t j|f|||d|S )	NZasset_typesr	   idasset_types_cat)r   fieldsZasset_type_catIN)filtermodels_listobject_fields)getmodelsCmfAssetCatr   r
   field_options_list)clsZrelation_field_namer   r   r   r   Zasset_cat_idr	   r   r   r   r      s    zCmfAsset.field_options_listc                 C   sN   | j sJtjjdgdddgdddggd| _ | j sJtjjdgdddgd| _ d S )Nparentsystem=Tnameu   Оборудование)r   r   )r	   r   r   r   r   r   r   r   r   #   s    

zCmfAsset._calc_catc                 C   s"   | j s|   | js| j j| _d S N)r	   r   r!   r   r   r   r   r   ,   s    zCmfAsset._calc_parentc                 C   s   | j s
d S | jj| _d S r%   )Zis_newr	   Zdefault_logic_type
logic_typer   r   r   r   r   2   s    zCmfAsset._calc_logic_typec                 C   s   | j stjjdd| _ d S )Nzasset.system:default)code)Zworkflowr   ZCmfWorkflowr   r   r   r   r   r   9   s    zCmfAsset._calc_workflowc                 C   s0   |  dg | js&|   | jj  | jjjS )Nzparent.asset_code_prefix)Zload_fieldsr!   r   Zasset_code_prefixloadvaluer   r   r   r   get_code_prefix=   s
    zCmfAsset.get_code_prefixFc                    s   | j r| jjs|sd S | j s*t   d S |rx|  }| j j| drb| j jd|dkrxd| j	_t   d S | jjr| j j|   dsd | _ t   d S d S )N-T)
r'   r!   Z
is_changedr
   
_calc_coder*   r)   
startswithcountr&   )r   Zfrom_recalculateZ
new_prefixr   r   r   r,   D   s(    
,
 
zCmfAsset._calc_codec                 C   sN   d}| j dddgdd| jgdd| jggd	gd
d}|rJt|jdd }|S )Nr'   z
SIMILAR TOz
%-[0-9]+\Zr!   r#   r   z!=z-cmf_created_atT)r   Zorder_byZinclude_deletedr+   )sget	parent_idr   intr'   split)r   Z
max_numberZlastr   r   r    _get_current_code_number_from_db]   s    "z)CmfAsset._get_current_code_number_from_dbc                 C   s   t j}d}| jr| jj}d| j d| }| j d| d}|jj|dd}|  z2||rl||}n|  d
 }||| W 5 z|  W nF tj	j
k
r } z$td| d|j d	|j  W 5 d }~X Y nX X | S )NZNOASSETznext_code_number-r+   z.lock   )timeoutzlock release error z, lock_name z
, timeout    )ZAPPZREDIS_DBr1   r)   
class_nameZredislockacquirerelease
exceptionsZ	LockErrorgdebugr$   r6   existsZincrr4   set)r   Zredis_dbsuffixkeyZlock_keyr9   enext_code_numberr   r   r   rD   g   s$    
4zCmfAsset.next_code_number)NNN)F)__name__
__module____qualname__r   r   classmethodr   r   r   r   r   r*   r,   r4   rD   __classcell__r   r   r   r   r      s   		
r   N)Zcmf.includeZmodules.asset.fields.cmf_assetr   r   r   r   r   <module>   s   