U
    g                     @   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 fddZed 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                    sj   |    |   |   |   | jjr4tddd | jsFtddd | jsXtddd t	 j
|| d S )NuQ   Нельзя добавить объект в абстрактную группуT)abortu#   Не заполнена схема!u   Не заполнено имя!)	_calc_cat_calc_parent_calc_logic_type_calc_workflow	asset_catZis_abstractZ	cmf_alertparentnamesupersaveselfargskwargs	__class__ #./modules/asset/models/cmf_asset.pyr      s    zCmfAsset.savec                    s   |    t j|| d S N)r   r   _save_importr   r   r   r   r      s    zCmfAsset._save_importc                    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              
      sj   t  |}|sfddg}|tj|d7 }|tj|d7 }|tj|7 }|tj|d7 }|S )Nr   Zext_idasset_code_prefixdefault_logic_typemodel_idbar_codeproduct_information
unit_priceversion
short_name)r   )r   )r   r   r   r   r    r!   )r   import_shop_fieldsmodelsZCmfAssetSchemeCmfAssetCatZCmfAssetTypeCatZCmfAssetType)clsZfields_nameresZcommon_fieldsr   r   r   r"      s<            zCmfAsset.import_shop_fieldsc           	         s   |dkr.|o| dd }|s g }|dd|gg}|dkr|s>g }d }|rh| di }|rd| dd }ng S |rtjj |dgd}|jr|dd	|jgg}|o| dd }|r|dd
|gg}t j|f|||d|S )Nr	   	parent_idz==Zasset_typesidasset_types_cat)r(   fieldsZasset_type_catIN=)filtermodels_listobject_fields)getr#   r$   r)   r   field_options_list)	r%   Zrelation_field_namer-   r.   r/   r   r'   Zasset_cat_idr	   r   r   r   r1   E   s4    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 )Nr
   systemr,   Tr   u   Оборудование)r*   r-   )r	   r#   r$   r0   r   r   r   r   r   c   s    

zCmfAsset._calc_catc                 C   s"   | j s|   | js| j j| _d S r   )r	   r   r
   r   r   r   r   r   l   s    zCmfAsset._calc_parentc                 C   s   | j s
d S | jj| _d S r   )Zis_newr	   r   
logic_typer   r   r   r   r   r   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CmfWorkflowr0   r   r   r   r   r   y   s    zCmfAsset._calc_workflowc                 C   s$   | j s|   | j j  | j jjS r   )r
   r   r   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)
r4   r
   Z
is_changedr   
_calc_coder7   r6   
startswithcountr3   )r   Zfrom_recalculate
new_prefixr   r   r   r9      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 )Nr4   z
SIMILAR TOz
%-[0-9]+\Zr
   r,   r(   z!=z-cmf_created_atT)r-   Zorder_byZinclude_deletedr8   )sgetr'   r(   intr4   split)r   Z
max_number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-r8   z.lock   )timeoutzlock release error z, lock_name z
, timeout    )ZAPPZREDIS_DBr'   r6   
class_nameZredislockacquirerelease
exceptionsZ	LockErrorgdebugr   rD   existsZincrrB   set)r   Zredis_dbsuffixkeyZlock_keyrG   enext_code_numberr   r   r   rR      s$    
4zCmfAsset.next_code_number)N)NNN)F)__name__
__module____qualname__r   r   r   classmethodr"   r1   r   r   r   r   r7   r9   rB   rR   __classcell__r   r   r   r   r      s   %	
r   N)Zcmf.includeZmodules.asset.fields.cmf_assetr   r   r   r   r   <module>   s   